2011-05-24 33 views
1

我目前有兩個表,一個用於pages(對象),另一個用於images(媒體)。如何將每個記錄的聯接限制爲一個結果,以便爲MYSQL

我想獲得系統中所有頁面的列表,並將單個圖像記錄加入每個頁面記錄。現在工作已經非常接近了,但是當我只想回到所有記錄時,它就會返回所有記錄。

我已經嘗試了幾個子查詢+獨特的,但還沒有得到它的工作呢。

任何人都可以指向正確的方向。我已經嘗試過羣組,但是在完成排序後它不起作用,因此會帶回錯誤的圖像。

SELECT title, 
    url, 
    media_file, 
    media_order 
FROM ndxz_objects 
    LEFT JOIN ndxz_media ON ndxz_objects.id = ndxz_media.media_ref_id 
WHERE `status` = 1 
    AND `section_id` = 2 
GROUP BY title, url, media_file, media_order 
ORDER BY ndxz_objects.ord, ndxz_media.media_order 
+1

什麼'ndxz_media'的表結構?你可以發佈'SHOW CREATE TABLE ndxz_media;'嗎?如果有的話,可以在裏面使用增量ID。 – 2011-05-24 02:22:43

+0

是的,兩個表內都有一個遞增的int。與我見過的一些問題相比,表格的結構並不算太差。如果需要,我也有控制權進行更改,但它似乎應該是一種相當標準的查找類型? – 2011-05-24 02:34:53

+0

爲了清楚起見,每個頁面都可以有許多與之相關的圖像,我只想要1回來,這是由media_order在介質表上定義的。 – 2011-05-24 02:38:37

回答

0

我沒有發現該查詢工作,這是我最終使用的。

SELECT title, url, media_file 
FROM ".PX."objects 
LEFT JOIN 
    (
SELECT m1.media_id, m1.media_ref_id, m1.media_file, m1.media_order 
    FROM ".PX."media AS m1 
    LEFT JOIN ".PX."media AS m2 ON m1.media_ref_id = m2.media_ref_id AND m1.media_order > m2.media_order 
    WHERE m2.media_ref_id IS NULL   
    ) 
maxmedia ON ndxz_objects.id = maxmedia.media_ref_id 
WHERE `status` = 1 
AND `section_id` = 2 
ORDER BY `ord` 

我發現這個從這裏組內aggrigates部分which seems like a good group of sql examples

0

如果你有一個AUTO_INCREMENTndxz_media稱爲id(例如),你可以在一個子查詢中MAX(id)MIN(id),並加入反對。

我認爲這是有效的,因爲MySQL允許將GROUP BY中未指定的列與聚合一起包括在內。這裏,子查詢中的media_filemedia_order

SELECT title, 
    url, 
    media_file, 
    media_order 
FROM ndxz_objects 
    JOIN (
    SELECT media_ref_id, MIN(media_order), media_file 
    FROM ndxz_media 
    GROUP BY media_ref_id 
) maxmedia ON ndxz_objects.id = maxmedia.media_ref_id 
WHERE etc. etc. etc. 

假設media_order爲高/低的值,而不是使用理論id,內部子查詢看起來像下面這樣。所有其他的東西都不會改變。

SELECT 
    media_ref_id, 
    MIN(media_order) AS media_order, 
    media_file 
FROM ndxz_media 
GROUP BY media_ref_id, media_file 

首先運行子查詢。它應該檢索單數記錄。然後,當放置到parens時,連接應該正常工作。

+0

嘿,也許我在你的查詢中出錯了,但是子查詢只返回了一條記錄。 – 2011-05-25 14:27:38

相關問題