ГДЕ пункт не ведет себя так, как я хотел бы это тоже - PullRequest
0 голосов
/ 13 июня 2011

В настоящее время у меня есть следующий запрос MySQL, который прекрасно выполняется без каких-либо ошибок:

SELECT topic_id,
       topic_title,
       topic_author,
       topic_type
FROM   forum_topics
WHERE  ( ( ( forum_id = '2' )
            OR ( forum_id != '4'
                 AND topic_type = 2 ) )
         AND deleted = 0 )
ORDER  BY topic_id DESC

Однако он не выполняет то, что я намереваюсь, я хочу, чтобы он возвращал все результаты тем, ГДЕ forum_idравно 2 и удалено равно 0, а также возвращает результаты тем, где forum_id не равен 4, а topic_type равно 2 и удалено равно 0 (если они существуют).

Но в настоящее время выполняется только первое возвращениеРезультаты тем ГДЕ значение forum_id равно 2 и удалено равно 0, а не другому (хотя они существуют!: /).

Я считаю, что я делаю что-то не так ...

Всепомощь очень ценится.

Ответы [ 3 ]

1 голос
/ 13 июня 2011

Я думаю, что ваше предложение where будет примерно таким:

WHERE  ( (forum_id = '2' AND deleted = 0) 
         OR 
         (forum_id != '4' AND topic_type = '2' AND deleted = 0)
       )
1 голос
/ 13 июня 2011

Чтобы упростить для себя, сначала поставьте непротиворечивую часть вашего запроса (удалено = 0):

SELECT 
    topic_id,        
    topic_title,        
    topic_author,        
    topic_type 
FROM   forum_topics 
WHERE deleted = 0 AND
      ( ( forum_id = '2' )             
          OR ( forum_id != '4'                  
               AND topic_type = 2 ) )          
ORDER  BY topic_id DESC 

Кроме того, ваш запрос выглядит правильно, я бы попробовал использовать оператор IN, если вы не можете заставить его работать.

0 голосов
/ 13 июня 2011

Попробуйте это:

SELECT topic_id, topic_title, topic_author, topic_type
FROM forum_topics
WHERE forum_id = 2
OR (forum_id != 4 AND topic_type = 2) 
AND deleted = 0 
ORDER BY topic_id DESC
...