2010-10-28 97 views
1

這是我的代碼: 'media_work'表有一個'order'字段,用於指示文件的順序。 我要排序的「media_work」表的結果獲得的第一項(圖像)訂購左​​連接的結果

此代碼的工作,但不訂購「media_work」

SELECT work.id, work.title, media.file_name_thumb,media_work.order, 
COUNT(media.file_name_thumb) AS mycount 
FROM work 
LEFT OUTER JOIN media_work ON media_work.work_id = work.id 
LEFT OUTER JOIN media ON media_work.media_id = media.id 
GROUP BY work.id ORDER BY work.id DESC 

這是結果

id title   file_name_thumb     order mycount 
------------------------------------------------------------------- 
3 laatste  thumb_20101028134738_278.gif 1  3 
2 test work add thumb_20101028133811_893.gif 1  56 
1 test werk  thumb_20101028132316_537.jpg 2  5 

我想要的順序來排序升序所以如果你想選擇第一media每個work這將是「0」

+0

你可以通過media_work.order訂購嗎? – Orbit 2010-10-28 13:00:42

+0

你說這有用嗎?我總是儘管'GROUP BY'必須與聚合函數結合使用,或者包含所有選定的列(與DISTINCT相同)。此外,請嘗試展示您獲得的結果的示例,以及它們與所需結果的不同之處。 – Phil 2010-10-28 13:01:33

+0

@Phil:'MySQL'允許這樣做,儘管它不會像@op想要的那樣工作。 – Quassnoi 2010-10-28 13:06:57

回答

2

SELECT work.id, work.title, media.file_name_thumb, 
     (
     SELECT COUNT(*) 
     FROM media_work 
     WHERE media_work.work_id = work.id 
     ) 
FROM work 
LEFT JOIN 
     media 
ON  media.id = 
     (
     SELECT media_work.media_id 
     FROM media_work 
     WHERE media_work.work_id = work.id 
     ORDER BY 
       media_work.work_id, media_work.order 
     LIMIT 1 
     ) 

media_work (work_id, order)上創建一個索引,以便快速工作。

+0

這很好,但我也想要'媒體'表的數量。這個怎麼用? – waterschaats 2010-10-28 13:31:57

+0

非常感謝! – waterschaats 2010-10-30 14:11:25