繁体   English   中英

防止mysql查询提供相同ID的多行

[英]Prevent mysql query from giving multiple rows of same id

首先,创建一个带有问题的SQL提要有点复杂,因为数据量很大。 通过这种方式,我尝试删除具有结果的屏幕截图。

问题似乎很小,我的查询运行得很好,但是因为不同的图像链接到同一城市(或距离范围内的城市)的不同位置,所以我此时获得了两次或更多次相同的图像。 因为此查询是在“ city” niveau上运行的,所以我只需要取回一张图像,因为我需要结果中的第一个图像(假定是最接近我的lan / lon的图像)。

查询:

SELECT c.slug
    ,l.location_id
    ,fl.flyer_id
    ,f.salt
    ,f.NAME
    ,f.online
    ,f.cover
    ,fc.cat_id
    ,ca.NAME AS cat_name
    ,lan
    ,lon
    ,(6371 * acos(cos(radians(1.5000759112888)) * cos(radians(lan)) * cos(radians(lon) - radians(2.6118285879120)) + sin(radians(1.5000759112888)) * sin(radians(lan)))) AS distance
FROM cities c
INNER JOIN locations l
    ON c.slug = l.city_slug
INNER JOIN flyers_locations fl
    ON l.location_id = fl.location_id
INNER JOIN flyers_categories fc
    ON fl.flyer_id = fc.flyer_id
INNER JOIN categories ca
    ON fc.cat_id = ca.id
INNER JOIN flyers f
    ON fl.flyer_id = f.id
HAVING distance < 25
    AND l.location_id != ''
    AND fc.cat_id = '41'
    AND f.online = '1'
ORDER BY distance ASC 
LIMIT 100

结果

在此处输入图片说明

在此处输入图片说明

非常感谢

如果您不希望图像出现两次,可以尝试在列名前面使用distinct

但是,如果您真的只想获取第一个,为什么不将限制设置为1? 这样,您只会得到第一(最接近)行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM