所以在我的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。
答案 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
值。