MySQLi! = Не работает с несколькими предложениями AND / OR

Итак, у меня есть две строки в моей базе данных — user_one а также user_twoэти строки заняты идентификаторами пользователей в качестве чисел для системы обмена сообщениями. Я также включил систему заявок в ту же функцию сообщений, но у меня возникли некоторые проблемы с этим фрагментом кода …

$sqlc="SELECT * FROM ap_conversations WHERE user_one = '$user_id' AND user_two != '999' OR user_two = '$user_id' AND user_one != '999' OR user_one = '$user_id' AND user_two != '999d' OR user_two = '$user_id' AND user_one != '999d'";

Как вы заметили, ID билетов поддержки 999и когда это было сделано, чтобы просто проверить, что ни один из ID не был 999 этот код работал отлично. Хотя мне тоже нужно проверить что ни user_one или же user_two имеет идентификаторы 999 или же 999d, Этот текущий код возвращает 1когда я точно знаю, он должен вернуться 0 поэтому я знаю, что что-то вызывающе идет не так, и я думаю, что я могу настроить это неправильно. Я попытался настроить его в разных форматах:

$sqlc="SELECT * FROM ap_conversations WHERE user_one = '$user_id' AND (user_two != '999' OR user_two != '999d') OR user_two = '$user_id' AND (user_one != '999' OR user_one != '999d')";

Но все же получить те же результаты? Кто-нибудь может сказать мне, что я делаю здесь неправильно или как я могу заставить этот код работать лучше?

1

Решение

   (user_one = '$user_id' AND user_two != '999')
OR (user_one = '$user_id' AND user_two != '999d')

…это проблема, это упрощает user_one = '$user_id', AND условия становятся неактуальными.

Если вы мне не верите, попробуйте user_one = user_id а также user_two = '999'.. Не выполняется первое условие в скобках, но проходит второе и возвращается.

Я полагаю, вы хотите:

SELECT * FROM ap_conversations
WHERE (user_one = :user_id AND user_two NOT IN ('999','999d'))
OR (user_two = :user_id AND user_one NOT IN ('999','999d'));

Нотабене Проходя в '999' или же '999d' как $user_id все равно вернет билеты поддержки. Мне очень нравится эта функциональность, но если она не нужна, вы можете использовать:

SELECT * FROM ap_conversations
WHERE (user_one = :user_id OR user_two = :user_id)
AND user_one NOT IN ('999','999d')
AND user_two NOT IN ('999','999d');
3

Другие решения

Вам нужно использовать круглые скобки, чтобы установить приоритет оператора:

$sqlc="SELECT * FROM ap_conversations
WHERE (user_one = '$user_id' AND user_two != '999')
OR (user_two = '$user_id' AND user_one != '999')
OR (user_one = '$user_id' AND user_two != '999d')
OR (user_two = '$user_id' AND user_one != '999d')";
5

Попробуйте добавить скобки в ваш запрос, как показано ниже:

$sqlc="SELECT * FROM ap_conversations WHERE (user_one = '$user_id' AND user_two != '999') OR (user_two = '$user_id' AND user_one != '999') OR (user_one = '$user_id' AND user_two != '999d') OR (user_two = '$user_id' AND user_one != '999d')";
0
По вопросам рекламы [email protected]