2015-01-14 31 views
0

所以在我的SQL表中我有这种情况。MySQL - 检索数据没有重复

一个项目(具有唯一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。

+0

你能告诉我们你有什么和你期待的结果吗? – Naruto

+0

记录*实际*是否重复,或者是“ultrait_wpl_items.item_name”中的值在每种情况下都不相同? (我猜这是) – CD001

+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 
+0

谢谢你的尝试,但我认为我必须重新构思我的想法,因为我需要所有的领域,但我也需要每个图像。这是一个乏味,我知道 – Blorange2

+0

'ultrait_wpl_items.item_name'上的值随着每条记录而变化,所以它们**已经是不同的记录 - 这个答案实际上并不能解决问题。 – CD001

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,所以它可能会产生一些奇怪的结果。但是,它会为每个id产生一个以逗号分隔的item_name列的列表。

LEFT JOIN使其正确地为id值正常工作缺乏任何图像。

+0

这很好,但有没有办法将它们分开一点? – Blorange2