下面是一個簡化的表結構:結果限制爲一個行
TABLE products (
product_id INT (primary key, auto_increment),
category_id INT,
product_title VARCHAR,
etc
);
TABLE product_photos (
product_photo_id (primary key, auto_increment),
product_id INT,
photo_href VARCHAR,
photo_order INT
);
產品可以具有多張照片,所述第一產品的照片爲每個產品(基於photo_order)是默認的照片。
現在,我只需要產品詳細信息頁面上的所有照片,但在列出多個產品的頁面上(例如產品目錄頁面),我只想顯示默認照片。
所以我想要做的是查詢產品列表,包括每個產品的默認照片。
這顯然是行不通的,它會返回所有的照片複製每張相片的產品信息:
SELECT p.*, ph.*
FROM products AS p
LEFT JOIN product_photos AS ph
ON p.product_id=ph.product_id
ORDER BY p.product_title ASC
我需要弄清楚如何做這樣的事情,但我不知道語法(或者如果可能的話)
SELECT p.*, ph.*
FROM products AS p
LEFT JOIN product_photos AS ph
ON p.product_id=ph.product_id **ORDER BY ph.photo_order ASC LIMIT 1**
ORDER BY p.product_title ASC
編輯:我想通了,有幫助的解決方案,從下面的答案,謝謝大家!
SELECT p.*, ph.*
FROM products AS p
LEFT JOIN product_photos AS ph
ON p.product_id=ph.product_id
AND ph.photo_order =
(
SELECT MIN(z.photo_order)
FROM product_photos AS z
WHERE z.product_id=p.product_id
)
GROUP BY p.product_id
ORDER BY p.product_title ASC
請提供PRODUCT_PHOTOS的一個例子 - 我想看看PHOTO_ORDER如何控制默認的,因爲你沒有提供的數據類型 – 2010-06-05 01:26:26
photo_order僅僅是一個整數,它應該* *每產品唯一的,但有必要保證 – Rob 2010-06-05 01:40:54
如果你切換到正確的加入和秩序:.product_title ASC,.photo_order ASC我想你會得到每行產品一行,這將是第一張照片。你不會看到沒有照片的產品(這可能是一個問題)。但它應該是一個更簡單的查詢。 – TheJacobTaylor 2010-06-05 01:43:12