我正在测验网站上工作,需要基于他们刚刚进行的测验来建议用户可能会喜欢的测验。基本上,如果他们刚刚参加的测验有一个标签,我需要使用相同的标签再抽取一次测验。否则,请从同一类别中抽取另一个测验。MySQL根据多个表条件选择
我的工作方式是按照我希望的方式工作90%,但对我来说这似乎很笨重。不工作的10%是我忘了添加一个条件,它只提取活动的测验。就像WHERE q.active = 1
,但无论我在哪里或如何添加该条件,它都无法按计划运行。我要么获得一个空集或者在条件被添加之前得到的结果相同。
编辑:
为了澄清,读取由@RiggsFolly评论后...
如果我添加AND q.active = 1
给我的第一WHERE
条款,只有一个其他测验同一个标签,它是不活跃我收到一个空集,而不是从类别选择语句接收结果。将AND q.active = 1
仅添加到类别选择语句,而不是标记选择语句返回适当的结果,如果没有使用相同标记的测验。
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
任何帮助或建议将不胜感激!
您应该多加一点美化这个SQL,多行,空行和缩进。 –
那么,在你的where子句中加上'AND q.active = 1' – RiggsFolly
@ Tiberiu-IonuţStan让SQL语句变得很漂亮绝对不是我的强项之一。我编辑了我的帖子,使其更清晰易读。感谢您的建议! – Jay