下面是一个简化的表结构:结果限制为一个行
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