Мне кажется, что запрос правильный, кроме части с OR
, поэтому я полагаю, что проблема связана с данными. Сначала я попытаюсь показать, как можно улучшить запрос, а затем попытаюсь показать, как отладить ваши данные.
Во-первых, давайте оставим условие OR
, поскольку оно не будет работать так, как ожидалось в предложении JOIN ON
.
Во-вторых, при сравнении целочисленных полей со значениями не следует заключать в кавычки значения. Это будет беспокоить только каждого, кто пытается понять запрос, потому что кавычки обозначают string значения, и это будет беспокоить (то есть замедлять) синтаксический анализатор MySQL, потому что он должен преобразовывать строковые значения в числа.
В-третьих, смешивание нормальных WHERE
условий и JOIN ON
условий вызывает беспокойство и плохой стиль (ИМХО). Я всегда рекомендую ставить только те условия, которые фактически связывают таблицы , в предложение JOIN ON
и другие условия в других местах.
Следование этому совету приведет к чему-то такому:
SELECT * FROM
notify INNER JOIN readed ON
readed.msg_ID = notify.ID
WHERE
readed.acc_ID = 26 AND
readed.user_ID = 6 AND
readed.readed != '1' AND
notify.groep = 1
Это должно быть сделано так же, как ваш исходный запрос, за исключением OR
части.
Теперь, поскольку мы подозреваем, что есть проблема с данными, мы можем начать отладку данных. Во-первых, пропустите пункт WHERE
:
SELECT * FROM
notify INNER JOIN readed ON
readed.msg_ID = notify.ID
Если это возвращает данные, то вы по крайней мере знаете, что в таблице readed
есть строки, совпадающие со строками в таблице notify
. Если он не возвращает никаких данных, то нет строк, которые бы совпали, и нашли корень вашей проблемы.
При условии, что вышеприведенное возвращает данные, заново построчно добавляйте предложение WHERE
и проверяйте после каждого шага. Например, начните с
SELECT * FROM
notify INNER JOIN readed ON
readed.msg_ID = notify.ID
WHERE
readed.acc_ID = 26 AND
и продолжить с
SELECT * FROM
notify INNER JOIN readed ON
readed.msg_ID = notify.ID
WHERE
readed.acc_ID = 26 AND
readed.user_ID = 6 AND
и т. Д., Каждый раз проверяя запрос.
Таким образом, вы надеетесь выяснить, в чем проблема. Я убежден, что проблема связана с данными, а не с запросом.