2009-04-25 3 views
3

я должен получить записи из моей БД MySQL, где:MySQL Query Выбор записей из базы данных, где значение равно один из двух разных вещей

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
SELECT * 
FROM pmmessages 
WHERE sentto = '$username' 
    OR sentto = 'everyone' 

Редактировать Крис, основанный на новом запросе:

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

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

Перепишите его к этому

SELECT * 
FROM pmessages 
WHERE status='unread' 
    AND 
     (sentto='$username' 
      OR sentto='everyone') 
+0

Да, я использовал это, но он возвращает еще одну запись, чем должен быть. Вот моя текущая строка: mysql_query ("SELECT * FROM pmessages WHERE status = 'unread' AND sentto = '$ username' OR sentto = 'every' "); –

+0

Благодарим вас. –

+0

Крис, вам может помочь найти некоторую информацию о SQL и логику оценки Boolean Операторы, такие как AND, NOT и OR. Вы обнаружите, что если вы не сгруппируете их правильно, это будет неправильно оценено, и вы не получите ожидаемые результаты. – TheTXI

2

Взяв деталь с одного из ваших комментариев во внимание - используйте ключевое слово и круглые скобки «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

Слово OR является тем, что вы ищете:

mysql_query ("SELECT * FROM pmessages WHERE sentto = '$ username' OR sentto = 'e Каждый человек ");

+0

Да, я использовал но он возвращает еще одну запись, чем должна быть. Вот моя текущая строка: mysql_query ("SELECT * FROM pmessages WHERE status = 'непрочитанный' AND sentto = '$ username' OR sentto = 'every'"); –

+0

заключить два теста «sentto» в круглые скобки.в настоящее время он рассматривается как «(status = 'непрочитанный' AND sentto = ... ') ИЛИ sentto =' everyone '" – Alnitak

+0

Это сработало! Пожалуйста, напишите ответ –

0

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

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

if (@sentto is null) 
begin 

    set @sendto='%' 

end 

mysql_query("SELECT * FROM pmessages WHERE sentto='$username'") 
2

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

SELECT * 
FROM pmessages 
WHERE status='unread' 
AND sentto IN ('everyone', '$username'); 
Смежные вопросы