php为每个项目只选择一个图像

时间:2015-01-24 10:40:09

标签: mysql left-join

我有两个表格('items'和'images'),并希望得到一个项目列表,每个项目只有一个图像。

假设item_id为1,此项目在images表格中有5条记录,我的代码项目1将在while循环中显示5次,因为它有5个图像,但这是不是我追求的。

我只需要一个图像就能显示一次该项目。

以下是我的发言:

SELECT * FROM items, images 
  WHERE item_banner = 'Yes' 
    AND item_publish = 'Yes' 
    AND image_type = 'img' 
    AND item_id = image_item_id  
ORDER BY RAND();

2 个答案:

答案 0 :(得分:1)

假设images有一个id列,您可以按特定项目的最低image_id加入图片。

我对条件image_type = 'img'感到好奇。你有不同类型的图像img吗? :)

SELECT * 
FROM 
  items i
  LEFT JOIN images
    ON image_item_id = item_id -- Not strictly needed, I guess
    AND image_type = 'img'
    AND image_id = (
      SELECT MIN(image_id) 
      FROM images 
      WHERE image_item_id = item_id)
WHERE item_banner = 'Yes' 
    AND item_publish = 'Yes' 
ORDER BY RAND();

答案 1 :(得分:0)

在我的案例中,此代码无需重复任何列,非常简单 我有一张桌子用于物品信息,一张桌子用于物品图像

CREATE or REPLACE VIEW items_page AS
select i.item_name,i.price,i.unit,
(select min(item_images.item_id)  from item_images where item_images.item_id=i.case_id order by item_images.item_id asc)as item_id ,(select image_url from item_images where item_images.item_id=i.case_id order by item_images.item_id limit 1)as imageurl  
from item i