2012-10-14 78 views
0

我想做一個選擇語句,我只是不能得到它的工作。sql多對多選擇與加入

我有3個表: placestagsplaces_tags

Places: 
    - id 
    - name 

Tags: 
    - id 
    - name 

Places_tags: 
    - place_id 
    - tag_id 
    - order 

我想選擇的地方,加入該插入(使用順序)的第一個標籤

 
     SELECT p.*, t.tag_id AS tag 
     FROM `places` as p 
     LEFT JOIN places_tags t ON (t.place_id = p.id) 
     group by p.id 

這就是我馬上。 我需要添加類似ORDER BY命令DESC ...

我認爲我沒有做正確的。

+1

請考慮改善您accepetance率。 – SchmitzIT

+0

感謝您的意見...我會這麼做 – Amir

回答

0

類似下面應該工作:

SELECT 
    p.name AS "place", 
    t.name AS "firstTag" 
FROM 
    places p 
    LEFT JOIN 
    places_tags pt1 
     ON pt1.place_id = p.id 
    LEFT JOIN 
    places_tags pt2 
     ON pt2.place_id = p.id AND pt2.tag_id < pt1.tag_id 
    LEFT JOIN 
    tags t 
     ON t.id = pt1.tag_id 
WHERE 
    pt2.tag_id IS NULL 
+0

無法看到這個答案對我有什麼幫助 – Amir

+0

@Amir基本的想法是對id列在結果中最小的記錄使用自己的'LEFT JOIN'和過濾器。 – btiernay

+0

@Amir我更新了我的解決方案以應用此方法。對不起,如果它不明確:) – btiernay