2011-02-23 46 views
1

我有一個表的設置如下:SQL訂單價值

+---------------+ 
| resources  | 
+---------------+ 
| id   | 
| name   | 
+---------------+ 
+-------------------+ 
| resource_subjects | 
+-------------------+ 
| resource_id  | 
| subject_id  | 
+-------------------+ 

我需要做的是建立其發現兩個資源之間共享的對象的數目的查詢。

所以有resource_subjects表是這樣的:

+---------------------------+ 
| resource_id | subject_id | 
+---------------------------+ 
| resource1 | 1   | 
| resource1 | 2   | 
| resource1 | 3   | 
| resource1 | 4   | 
| resource1 | 5   | 
| resource2 | 1   | 
| resource2 | 2   | 
| resource2 | 3   | 
| resource3 | 1   | 
| resource3 | 4   | 
+---------------------------+ 

我想這個查詢給我這樣的:

+----------------------------------------------------------+ 
| first_resource | second_resource | shared_subjects_count | 
+----------------------------------------------------------+ 
| resource1  | resource2  | 3      | 
| resource1  | resource3  | 2      | 
| resource2  | resource3  | 1      | 
+----------------------------------------------------------+ 

要跨的想法,僞代碼在我頭部會讀取類似:

選擇id AS first_resourceid AS second_resource,COUNT(受試者 數first_resource和second_resource在resource_subjects表之間共享)AS shared_subjects_count ORDER BY shared_subjects_count DESC

如果任何人都可以提供一個示例查詢,或者甚至點我在正確的方向那d太棒了。

感謝

回答

0

創建一個類似於你我用一個表:

CREATE TABLE resource_subjects (
res_id int(11), 
sub_id int(11) 
); 

INSERT INTO resource_subjects VALUES 
(1,1), 
(1,2), 
(1,3), 
(1,4), 
(1,5), 
(2,1), 
(2,2), 
(2,3), 
(3,1), 
(3,4); 

然後你就可以使用查詢:

SELECT t2.res_id 'first', t1.res_id 'second', COUNT(t1.sub_id) 
FROM resource_subjects t1 
JOIN resource_subjects t2 ON t1.res_id > t2.res_id AND t1.sub_id = t2.sub_id 
GROUP BY 1,2 

注意,我RESOURCE_ID是一個真正的ID (整數)而不是一個字符串,它允許ON子句中的條件大於條件。

+0

RESOURCE_ID是在我的情況一個int,我只是用資源1,資源2等的可讀性(應該澄清)。謝謝你的回答,很有魅力。 – Paul 2011-02-23 10:08:53

0

這似乎在MySQL的:

select 
    a.resource_id as first_resource, 
    b.resource_id as second_resource, 
    count(*) as shared_subjects_count 

from 
    resource_subjects as a, 
    resource_subjects as b 

where 
    a.resource_id < b.resource_id 
    and a.subject_id = b.subject_id 
    group by a.resource_id,b.resource_id; 
+0

沒有'ORDER BY'子句......? – onedaywhen 2011-02-23 10:23:19