MySQL根据多个表条件选择

时间:2016-08-13 13:20:53

标签: php mysql pdo

我正在开设一个测验网站,需要根据他们刚刚参加的测验建议用户可能喜欢的测验。基本上,如果他们刚刚采取的测验有一个标签我需要用相同的标签拉另一个测验。否则,从同一类别中提取另一个测验。

我所拥有的是按照我想要的方式工作90%,但对我来说似乎非常笨重。 10%不起作用的是我忘了添加一个条件,它只会拉动活动的测验。像WHERE q.active = 1之类的东西,但无论我在何处或如何添加该条件,它都无法按计划运行。我要么得到一个空集,要么在添加条件之前得到相同的结果。

编辑:

在阅读@RiggsFolly评论后澄清......

如果我将AND q.active = 1添加到我的第一个WHERE子句中并且只有一个其他测验具有相同的标记并且它未处于活动状态我会收到一个空集而不是从类别选择中接收结果声明。如果没有具有相同标记的测验,则仅将AND q.active = 1添加到类别select语句而不是标记select语句中返回正确的结果。

SELECT 
    IFNULL(q.meta_title, q.title) AS title, 
    IFNULL(url, title) AS url, 
    1 istag
FROM tag_index t
LEFT JOIN tag_index ti 
    ON ti.tag_id = t.tag_id
LEFT JOIN quizzes q 
    ON q.id = ti.quiz_id
WHERE t.quiz_id = :quiz_id 
    AND ti.quiz_id != t.quiz_id

UNION ALL

SELECT 
    IFNULL(q.meta_title, q.title) AS title, 
    IFNULL(url, title) AS url, 
    0 istag
FROM category_index c
LEFT JOIN category_index ci 
    ON ci.category_id = c.category_id
LEFT JOIN quizzes q 
    ON q.id = ci.quiz_id
WHERE c.quiz_id = :quiz_id 
    AND ci.quiz_id != c.quiz_id 
    AND NOT EXISTS
        (SELECT 1 FROM tag_index WHERE quiz_id = :quiz_id)
ORDER BY RAND() LIMIT 1

非常感谢任何帮助或建议!

0 个答案:

没有答案