MySQL - 无需重复即可检索数据

时间:2015-01-14 13:00:42

标签: php mysql

所以在我的SQL表中我遇到了这种情况。

一个项目(具有唯一ID)可以将照片与之关联。

我需要获取一个项目的所有信息以及一个记录中的两张照片(或更精确的行)。

我目前的查询是:

SELECT ultrait_wpl_properties.id, location1_name, location3_name, location4_name, field_312, field_42, post_code, lot_area, living_area, price, bedrooms, bathrooms, field_308, googlemap_lt, googlemap_ln, street, street_no, ultrait_wpl_property_types.name, property_title, build_year, add_date, ultrait_wpl_items.item_name 
    FROM ultrait_wpl_properties 
    JOIN ultrait_wpl_property_types ON ultrait_wpl_properties.property_type = ultrait_wpl_property_types.id 
    JOIN ultrait_wpl_items ON ultrait_wpl_properties.id = ultrait_wpl_items.parent_id 
    ORDER BY ultrait_wpl_properties.id ";

从这个查询中我得到了我需要的所有信息和图片。我当前的方法的问题是,如果有多个图片,我的查询执行时会得到一个重复的行。有办法解决这个问题吗?

我问我后来使用这些数据并将其导出到xml文件,但因为此查询会为每张照片返回一个重复记录。具有一个项目但只有5个图片的XML文件将返回5个相同的节点,但具有不同的图像URL。

2 个答案:

答案 0 :(得分:0)

按如下方式重写您的查询

SELECT DISTINCT
    ultrait_wpl_properties.id,
    location1_name,
    location3_name,
    location4_name,
    field_312,
    field_42,
    post_code,
    lot_area,
    living_area,
    price,
    bedrooms,
    bathrooms,
    field_308,
    googlemap_lt,
    googlemap_ln,
    street,
    street_no,
    ultrait_wpl_property_types.name,
    property_title,
    build_year,
    add_date,
    ultrait_wpl_items.item_name
FROM
    ultrait_wpl_properties
INNER JOIN
    ultrait_wpl_property_types ON
        ultrait_wpl_properties.property_type = ultrait_wpl_property_types.id
INNER JOIN
    ultrait_wpl_items ON 
        ultrait_wpl_properties.id = ultrait_wpl_items.parent_id
ORDER BY
    ultrait_wpl_properties.id

答案 1 :(得分:0)

你可以试试这个。

   SELECT ultrait_wpl_properties.id,
          (all those other columns),
          GROUP_CONCAT(ultrait_wpl_items.item_name) items
     FROM  ultrait_wpl_properties
    INNER JOIN ultrait_wpl_property_types 
              ON ultrait_wpl_properties.property_type = ultrait_wpl_property_types.id
     LEFT JOIN ultrait_wpl_items 
              ON ultrait_wpl_properties.id = ultrait_wpl_items.parent_id
    GROUP BY ultrait_wpl_properties.id

它使用notorious non-standard GROUP BY extension in MySQL,因此可能会产生稍微奇怪的结果。但它会为每个item_name生成以逗号分隔的id列列表。

LEFT JOIN使其能够正常显示缺少任何图像的id值。