我正在測驗網站上工作,需要基於他們剛剛進行的測驗來建議用戶可能會喜歡的測驗。基本上,如果他們剛剛參加的測驗有一個標籤,我需要使用相同的標籤再抽取一次測驗。否則,請從同一類別中抽取另一個測驗。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