За последние 24 часа нас посетили 34084 программиста и 1709 роботов. Сейчас ищут 760 программистов ...

Можно ли одним SQL-запросом сменить true на false?

Тема в разделе "PHP для новичков", создана пользователем bocharsky, 23 ноя 2014.

  1. bocharsky

    bocharsky Новичок

    С нами с:
    18 апр 2014
    Сообщения:
    77
    Симпатии:
    1
    В БД есть поле blocked.
    Если в админке сайта нажать кнопку "Заблокировать пользователя", в этом поле устанавливается значение 1.Если разблокирован - 0.

    Предполагаю, что было бы логично делать как-то так:
    Код (Text):
    1.  
    2.  if (isset($_POST['submit'])) {
    3.     $user_id = $_POST['user_id'];
    4.     $sql = mysql_query("UPDATE User SET ***INVERSE*** blocked WHERE user_id = '$user_id'");
    5. }
    ***INVERSE*** - выдуманная мною команда, которая демонстрирует подход.
    Было бы удобно при нажатии на кнопку, просто менять значение поле в БД на противоположное (с true на false и обратно), а не разбираться, какое оно там, и в php менять в явном виде 0 на 1, а 1 на 0.

    Возможно ли что-то подобное?
    Спасибо
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
  3. bocharsky

    bocharsky Новичок

    С нами с:
    18 апр 2014
    Сообщения:
    77
    Симпатии:
    1
    Вау! Круто!
    Огромное спасибо!
     
  4. VaneS

    VaneS Активный пользователь

    С нами с:
    16 ноя 2011
    Сообщения:
    636
    Симпатии:
    4
    Адрес:
    Россия
    А почему не использовать логические типы?
     
  5. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    тогда уж битмап сразу.
     
  6. bocharsky

    bocharsky Новичок

    С нами с:
    18 апр 2014
    Сообщения:
    77
    Симпатии:
    1
    А как в этом случае будет выглядеть подобная манипуляция?
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    http://stackoverflow.com/questions/289727/which-mysql-datat ... ean-values

    В качестве "булева" типа ты можешь использовать любой целочисленный тип. В большинстве ЯП целые значения используются как логические по принципу "любое ненулевое значение считается истиной". SQL и PHP не исключение.

    В SQL есть еще нюанс со значением NULL. Он делает логику троичной: «да», «нет» и «не известно» ))) Поэтому, чтобы крышу не сорвало, старайся использовать уточнение NOT NULL при описании полей.
     
  8. bocharsky

    bocharsky Новичок

    С нами с:
    18 апр 2014
    Сообщения:
    77
    Симпатии:
    1
    Так мы же с вами ровно это и делаем, разве нет?

    У меня в БД тип данных указан, как Boolean. В phpMyAdmin тип данных для этой колонки выводится, как TINYINT(1). Пишу я туда 0 и 1. Т.е. все ровно так.
    Соответственно, ваш первый комментарий про "делай SET fld = NOT fld" на мой непросвещенный взгляд, как раз и есть "использование логических типов". Которые с помощью логического оператора NOT инвертируются. Т.е. все так и есть.

    Но увидев комментарий VaneS, я подумал, что возможно есть еще какой-то прием и он имеет в виду что-то еще.

    Итого:
    а) либо комментарий VaneS при всем к нему уважении нужно не брать в голову, т.к. мы это и так делаем
    б) либо есть что-то еще. И мне, конечно, интересно.
     
  9. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Всё верно. Это был ответ на "А почему не использовать логические типы?"
     
  10. bocharsky

    bocharsky Новичок

    С нами с:
    18 апр 2014
    Сообщения:
    77
    Симпатии:
    1
    Ага, понял. Спасибо.
    Вопрос закрыт)