Есть таблица 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 должна сработать.
Нет. Не должна. 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)
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости