MySQL Query Выбор записей из базы данных, где значение равно одной из двух разных вещей - PullRequest
3 голосов
/ 25 апреля 2009

Я должен получить записи из моей базы данных MySQL, где:

sentto = "$username"

ИЛИ

sentto = "everyone"

Как бы я поместил это в запрос MySQL? Я попробовал несколько вещей, но они, похоже, не работают:

mysql_query("SELECT * 
             FROM pmessages 
             WHERE status='unread' 
                 AND sentto='$username' || sentto='everyone'");

mysql_query("SELECT * 
             FROM pmessages 
             WHERE status='unread' 
             AND sentto='$username' 
                 AND sentto='everyone'");

Кажется, я в замешательстве, если кто-нибудь знает, как сделать это правильно, пожалуйста, дайте мне знать. Это новый сценарий для меня. Спасибо!

Ответы [ 5 ]

5 голосов
/ 25 апреля 2009
SELECT * 
FROM pmmessages 
WHERE sentto = '$username' 
    OR sentto = 'everyone'

Редактировать Крис, на основе вашего нового запроса:

SELECT * 
FROM pmessages 
WHERE status='unread' 
    AND sentto='$username' 
OR sentto='everyone' 

Вам нужно изменить его так, чтобы ваш AND стоял отдельно (он конфликтует с вашим OR).

Перепишите это на

SELECT * 
FROM pmessages 
WHERE status='unread' 
    AND 
        (sentto='$username' 
            OR sentto='everyone' )
2 голосов
/ 23 октября 2012

Поскольку это тот же столбец, который вы тестируете, я бы использовал ключевое слово IN:

SELECT * 
FROM pmessages 
WHERE status='unread' 
AND sentto IN ('everyone', '$username');
2 голосов
/ 25 апреля 2009

Принимая во внимание детали одного из ваших комментариев, используйте ключевое слово "OR" и скобки, чтобы убедиться, что правильные условия объединены.

SELECT * FROM pmessages WHERE
   status = 'unread'
    AND
  (sentto = ? OR sentto = 'everyone')

Ваша проблема никогда не была с OR, хотя на самом деле это был AND приоритет и отсутствие скобок. Очень важной деталью, которую вы полностью пропустили в своем вопросе, был дополнительный тест для "status = unread".

Обратите внимание на использование ? выше - вы должны на самом деле , на самом деле использовать подготовленные операторы при объединении MySQL и PHP, т.е.

$sql = "..." # as above
$sth = $db->prepare($sql);
$res = $sth->execute($username);
while ($row = $sth->fetchrow()) {
    ...
}

(или mysqli эквивалент)

0 голосов
/ 25 апреля 2009

это фактическое значение для всех или вы хотите вернуть все результаты?

если вы хотите вернуть все результаты, настройте что-то вроде этого

if (@sentto is null)
begin

     set @sendto='%'

end

mysql_query("SELECT * FROM pmessages WHERE sentto='$username'")
0 голосов
/ 25 апреля 2009

Слово ИЛИ - это то, что вы ищете:

mysql_query ("SELECT * FROM pmessages WHERE sentto = '$ username' ИЛИ ​​sentto = 'Everyone'");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...