MYSQL сравнение timestamp

201
08 февраля 2018, 17:58

Есть таблица chats, а так же таблица members. Я пытаюсь получить новые чаты.

SELECT *
FROM
  chat.members AS m
  JOIN chat.chats AS c 
WHERE m.chatid = c.id  AND m.userid = ?i

И получаю массив:

[0] => Array
    (
        [id] => 21
        [userid] => 1
        [chatid] => 21
        [lastvisit] => 
        [display] => 1
        [lastupdate] => 2018-02-07 15:23:06
    )

Но дело в том, что как только я добавляю в запрос AND m.lastvisit < c.lastupdate то есть условие, что нужно сделать выборку только там, где визит пользователя был раньше, чем произошло обновление чата, мне возвращается пустой массив, выборка не происходит.

Я не могу понять почему, так как элементарно в полученном прежде массиве, поле lastvisit пусто (пользователь ещё не посещал чат), а поле lastupdate имеет значение, и следовательно проверка AND m.lastvisit < c.lastupdate должна сработать.

Answer 1

Нет. Не должна. lastvisit имеет значение NULL. А все операции (в том числе и сравнение) с NULL дают NULL (который интерпретируется как FALSE). Кроме, собственно, непосредственной проверки IS NULL / IS NOT NULL

Если я правильно понял, то Вам нужен такой запрос

SELECT *
FROM
  chat.members AS m
  JOIN chat.chats AS c 
WHERE
  m.chatid = c.id AND
  m.userid = ? AND
  (m.lastvisit < c.lastupdate OR m.lastvisit IS NULL)
READ ALSO
Почему данный код PHP не работает?

Почему данный код PHP не работает?

try и catch не выводят ошибку!

168
Сравнение нескольких массивов [требует правки]

Сравнение нескольких массивов [требует правки]

Всем привет, есть такая задача, существует несколько многомерных массивов, грубо говоря 1:мСложность в чем, все реквизиты разбиты на группы,...

131
Как вычесть массивы?

Как вычесть массивы?

Есть два массива, к примеру:

178
Задать размер PDF

Задать размер PDF

Подскажите, пожалуйста, как задать размер (А4, с отступами 0, 15, 2, 0 (см) от границы) pdf в DOMPDF, используя set_Paper?

140