mysql左连接获取两个查询
好的,我有两张桌子,房子和照片。我想说的是 对于每一所房子,我想打电话给该房子的照片数量,以及该照片的最低排序顺序号码 我尝试了不同类型的左连接,一个返回我的全部照片,这很好,但不返回最小排序顺序,另一个返回我的最小排序顺序,但不给我全部照片 我现在的代码是mysql左连接获取两个查询,mysql,Mysql,好的,我有两张桌子,房子和照片。我想说的是 对于每一所房子,我想打电话给该房子的照片数量,以及该照片的最低排序顺序号码 我尝试了不同类型的左连接,一个返回我的全部照片,这很好,但不返回最小排序顺序,另一个返回我的最小排序顺序,但不给我全部照片 我现在的代码是 SELECT properties.p_id, properties.s_property_id,
SELECT properties.p_id, properties.s_property_id, properties.a_property_id,
properties.p_advert_heading, properties.p_postcode, properties.p_price,
properties.p_bedrooms, properties.p_bathrooms, properties.p_status,
properties.p_priority, property_photos.photo_url, property_photos.sort_order, property_photos.photo_local,
COUNT(property_photos.p_id) AS tot_photos
FROM properties
LEFT JOIN property_photos on properties.p_id = property_photos.p_id
WHERE properties.is_archieved = 0 AND properties.p_status = 1 AND properties.a_id = 16
GROUP BY properties.p_id
即:
因此,我需要以最小排序顺序查找图片总数和图片id…您只需使用分组方式和聚合功能:
SELECT
h.property_id,
h.property_name,
COUNT(p.photo_id) AS photo_count,
MIN(p.sort_order) AS min_sort
FROM house_table AS h
LEFT JOIN photo_table AS p
ON h.property_id = p.property_id
GROUP BY h.property_id
通过使用子字符串\u index/group\u concat方法获取第一个照片\u id,您可以最容易地获取这两个值:
为什么要这么做而不是使用简单的聚合函数?@MikeBrant。因为这是一个没有连接的单一聚合函数。它应该比其他方法执行得更好。您的答案不会返回具有最小排序顺序的属性。然而,我并没有不礼貌地否决你的答案。@GordonLinoff问题陈述似乎表明OP正在寻找每个属性的最小排序顺序值,不是具有最低排序顺序值的单个属性。该语句还表示该照片的最小排序顺序号表明OP在英语方面有困难,并且他/她对某张照片感兴趣。我把这张照片解读为房屋最低排序顺序的照片;对我来说,这似乎是唯一合理的解释。编辑了我的问题并添加了代码Jonathon为什么minsort_order不能满足您的要求?我已使用另一个子查询进行排序,但无法编写它,因为我没有足够的声誉,但感谢you uto all为我提供的帮助。非常感谢
SELECT
h.property_id,
h.property_name,
COUNT(p.photo_id) AS photo_count,
MIN(p.sort_order) AS min_sort
FROM house_table AS h
LEFT JOIN photo_table AS p
ON h.property_id = p.property_id
GROUP BY h.property_id
select property_id, count(*) as numphotos,
substring_index(group_concat(photo_id order by sort_order), ',', 1) as min_photo_id
from photo_table pt
group by property_id;