我有一個列表和一個列表項目表。我想制定一個查詢來爲列表中的每個項目選擇一個列表項目。下面是一些簡單的數據來說明我的問題:如何爲每個父記錄選擇一個子表項?
'lists' table
id updated share
--- ---------- -----
1 2013-07-11 1
2 2013-07-13 0
3 2013-07-15 1
4 2013-07-14 0
5 2013-07-14 1
'list_items' table
id l_id description sort likes
-- ---- ----------- ---- -----
1 1 hello 0 3
2 1 goodbye 0 0
3 1 thanks 0 4
4 2 ok 0 0
5 3 love 0 2
6 3 hate 1 1
7 4 celebrate 0 0
8 5 party 0 1
9 5 summer 1 5
10 5 winter 2 2
現在說我想從每個共享列表(份額= 1),得到的第一個項目。首先,我的意思是如果列表項按「排序」排序。
基於上述數據預期的結果將是:
lists.id id l_id description sort likes
-------- -- ---- ----------- ---- -----
1 1 1 hello 0 3
3 5 3 love 0 2
5 8 5 party 0 1
更新: 我努力讓我的頭周圍的peterm和hims056和而提供的解決方案凱拉的解決方案看起來更象是我可以按照它沒有返回正確的結果。以思想從這些解決方案我有裂紋,在它自己與
SELECT * FROM (
SELECT lists.id AS listid, lists.share, list_items.*
FROM list_items, lists
WHERE lists.id = l_id
AND lists.share = 1
ORDER BY sort) q
GROUP BY q.listid
這似乎是工作上來,但作爲peterm指出,在SELECT子句中的列不屬於組的一部分by子句中的值可能不明確。
我雖然有人會想出使用LIMIT
的解決方案,因爲這是我首先想到的方式。您可以返回其允許通過簡單的共享目錄ID:
SELECT lists.id FROM lists WHERE share = 1
和給定列表ID可以通過返回頂部列表項:
SELECT lists.id AS listid, lists.share, list_items.*
FROM list_items, lists
WHERE lists.id = l_id
AND lists.id = 1
ORDER BY sort
LIMIT 1
但是有沒有把這些2的方式聲明一起返回每個允許共享的列表的頂部列表項目?
沒有任何答案對您有幫助嗎? – hims056