SELECT не возвращает значение на «И» - PullRequest
1 голос
/ 21 февраля 2011

Я что-то упустил?Моя таблица содержит:

  • country со значением 'usa'
  • school-type со значением '4 Year University'

Если я использую строку 2, запрос возвращает «220».Если я использую строку 4, он также возвращает «220».Если я использую оба с «ИЛИ» между ними, он возвращает «220» дважды, но если я использую «И», он ничего не возвращает.Есть идеи?

SELECT post_id FROM wp_postmeta WHERE
(   (meta_key='school-type' AND meta_value='Community College')
 OR (meta_key='school-type' AND meta_value='4 Year University'))
AND
(   (meta_key='country' AND meta_value='usa')
 OR (meta_key='country' AND meta_value='canada'))

Ответы [ 3 ]

1 голос
/ 21 февраля 2011

Проблема в том, что в одной строке не может быть meta_key как "школьного типа", так и "страны".Из-за этого объединение двух разных результатов поиска приводит к 0 результатам.

0 голосов
/ 21 февраля 2011

WHERE фильтрует каждую строку, поэтому meta_key не может быть типа школы и страны.

Попробуйте выражение HAVING:

SELECT post_id
FROM wp_postmeta
WHERE meta_key='school-type' OR meta_key='country'
GROUP BY post_id
HAVING SUM(
    IF(meta_key='school-type',
      meta_value='Community College' OR meta_value='4 Year University',
      meta_value='usa' OR meta_value='canada'
      )) = 2

Или, Если вы хотите получить обе строки:

SELECT post_id
FROM wp_postmeta
WHERE
((meta_key='school-type' AND meta_value='Community College') OR (meta_key='school-type' AND meta_value='4 Year University'))
OR
((meta_key='country' AND meta_value='usa') OR (meta_key='country' AND meta_value='canada'))
0 голосов
/ 21 февраля 2011

Ваш запрос неверен.Давайте рассмотрим пример, если meta_key = 'school-type', чем это не может быть страна, поэтому ваше второе условие всегда будет быстро возвращаться.

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