MySQL запрос - условный выбор - PullRequest
0 голосов
/ 21 января 2011

У меня есть таблица с некоторыми данными

t1
------------------
id (int)
item_id (int)
item_description (text)
showHide (enum 0,1)

Обычно я показываю любые результаты, для которых флаг showHide установлен в '0'. Мне нужно изменить запрос, чтобы он также отображал результаты с флагом showHide, установленным в '1', если у пользователя есть соответствующий item_id в другой таблице, t2.

t2
------------------
id (int)
item_id (int)
usr_id (int)

Застрял здесь, не уверен, как это сделать:

SELECT item_description FROM t1
// get results with  showHide = 0 
// AND 
// showHide = 1 if t1.item_id found in t2 WHERE usr_id = 123

Ответы [ 2 ]

1 голос
/ 21 января 2011
SELECT 
  t1.item_description
FROM
  t1
LEFT JOIN (
  SELECT item_id FROM t2 WHERE usr_id = 123
) AS t2
USING (item_id)
WHERE 
  t1.showHide = 0 
OR
  (t1.showHide = 1 AND t2.item_id IS NOT NULL)
1 голос
/ 21 января 2011

Просто объедините 2 запроса с UNION

SELECT t1.item_description
  FROM t1
 WHERE showHide = 0
UNION
    SELECT t1.item_description
      FROM t1
INNER JOIN t2 ON t1.item_id = t2.item_id
     WHERE showHide = 1

Чем хитрее, тем меньше производительность:

    SELECT t1.item_description
      FROM t1
 LEFT JOIN t2 ON t1.item_id = t2.item_id
     WHERE showHide = 0
        OR (showHide = 1 AND t2.item_id IS NOT NULL)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...