查詢可以變爲動態嗎?根據所選類別計數行以進行查詢的查詢中的查詢
SELECT master.id,
(select count(0) as score1 from scores where scores.id = master.id AND scores.category = '1'),
(select count(0) as score2 from scores where scores.id = master.id AND scores.category = '2'),
(select count(0) as score3 from scores where scores.id = master.id AND scores.category = '3'),
(repeat for as many categories chosen by the current user)
score1+score2+score3 AS score FROM master ORDER BY score DESC LIMIT 1
我知道這個語法不正確。
我想要的效果取決於用戶選擇的類別,我想查找記錄。每個記錄都在另一個表中打分。
我希望能夠多次重複查詢在括號中,因爲基於另一個ID是在另一個數據庫中找到類別:
anotherid,category
1,1
1,2
1,3
2,2
2,3
3,1
3,2
3,3
所以,如果我通過「1」,上面的查詢我'喜歡它重複括號中的查詢結果類別1,2和3(因此三個查詢導致三個分數加起來總計)。
我曾試着問過這個問題,但我認爲我過於複雜的東西!
UPDATE:
我剛纔提出這個查詢 - 我認爲它的工作原理。任何人都看到明顯的錯誤?
SELECT
users.id,
users.url,
(
SELECT SUM(scoretot.scr) FROM scoretot WHERE scoretot.id = users.id AND scoretot.category
IN (
SELECT category FROM getprefs WHERE member = '2'
)
) AS score
FROM users
ORDER BY score DESC limit 1
值2將在Perl查詢被動態地創建(這將是當前用戶的ID)。
我有兩種觀點
create view getprefs select `prefs`.`category` AS `category`,`prefs`.`member` AS `member` from `prefs`
create view scoretot select count(`scores`.`ref`) AS `scr`,`scores`.`id` AS `id`,`scores`.`category` AS `category` from `scores` group by `scores`.`category`
和三個表:
表用戶:
id,url
1,www.test.com
2,www.test2.com
3,www.test3.com
表分數:
id,category
1,1
1,1
1,2
1,2
1,3
1,3
1,3
2,2
3,1
3,3
3,3
3,3
3,2
表首選項
member,category
1,1
1,2
1,3
2,1
3,1
3,3
「認爲」這是它....
這將是更容易使返回你想,如果值查詢您將每個值作爲單獨的行而不是列返回。你有沒有考慮過這個選項? – 2010-01-06 21:51:43
@克里斯,你的例子是這樣的難讀。您能否使用換行符重新格式化它,並將SQL關鍵字大寫? – 2010-01-06 22:07:00
嗨,我已根據要求更改了上述「創意」代碼。感謝您的期待! – 2010-01-06 22:28:08