Итак, у меня есть две строки в моей базе данных — 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')";
Но все же получить те же результаты? Кто-нибудь может сказать мне, что я делаю здесь неправильно или как я могу заставить этот код работать лучше?
(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');
Вам нужно использовать круглые скобки, чтобы установить приоритет оператора:
$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')";
Попробуйте добавить скобки в ваш запрос, как показано ниже:
$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')";