【发布时间】:2016-05-29 11:18:23
【问题描述】:
我正在尝试将两个有效的 sql 语句组合成一个有效的 sql 语句。
下面是两个单独执行时各自工作的 sql 语句:
第一个选择特定区域中的商店的所有产品和产品所在的商店,以及产品具有的类别。用于在网站上展示产品,然后在每个产品下列出该产品的商店和类别。
SELECT p.p_id, p.`p_name`, p.brand,
GROUP_CONCAT( DISTINCT CONCAT(c.c_id, ':', c.c_name) SEPARATOR ', ' ) as categories,
GROUP_CONCAT( DISTINCT CONCAT(s.s_id, ':', s.s_name) SEPARATOR ', ' ) as shops
FROM product p
INNER JOIN product_category pc on p.p_id = pc.p_id
INNER JOIN category c ON c.c_id = pc.c_id
INNER JOIN product_shop ps on p.p_id = ps.p_id
INNER JOIN shop s ON s.s_id = ps.s_id
WHERE s.street = 'college hill'
AND s.city = 'auckland'
AND s.province = 'auckland'
AND s.country = 'new zealand'
AND s.postalCode = '1011'
我上面的 sql 语句的结果是这样的:
重要提示:我已经在 shop 表中添加了纬度和经度字段,这对于这个问题中的下一个 sql 语句很重要
第二条 sql 语句取自 this link that finds the closest 20 shops to a latlong coordinate in a table of shops。我已经对其进行了调整以与我的数据库一起使用:
SELECT s_id, ( 3959 * acos( cos( radians(-36.8473223
) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(174.744227
) ) + sin( radians(-36.8473223
) ) * sin( radians( latitude ) ) ) ) AS distance FROM shop HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;
它给出了这个结果:
所以通过结合这两条sql语句,我可以选择离latlong坐标最近的店铺中的产品,在网站上显示产品,然后是每个产品的店铺和类别。
我要做的就是将商店与给定纬度和经度坐标(由用户使用谷歌自动完成地点对象输入)的距离添加到我在顶部发布图像的商店选择结果中这个问题的sql语句。因此,在商店结果中,只需为每个商店添加一个距离结果,例如 5.897。并返回距离最近的条目。
这是我目前的尝试:
SELECT p.p_id,
p.`p_name`,
p.brand,
GROUP_CONCAT(DISTINCT CONCAT(c.c_id, ':', c.c_name) SEPARATOR ', '
) as categories,
GROUP_CONCAT(DISTINCT CONCAT(s.s_id, ':', s.s_name, ':',
( 3959 * acos( cos( radians(-36.8473223
) ) * cos( radians( s.latitude ) ) * cos( radians( s.longitude ) - radians(174.744227
) ) + sin( radians(-36.8473223
) ) * sin( radians( s.latitude ) ) ) ) AS distance) SEPARATOR ', '
) as shops
FROM
product p
INNER JOIN product_category pc on p.p_id = pc.p_id
INNER JOIN category c ON c.c_id = pc.c_id
INNER JOIN product_shop ps on p.p_id = ps.p_id
INNER JOIN shop s ON s.s_id = ps.s_id HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;
我收到此错误:
1583 - 调用本机函数 'CONCAT' 中的参数不正确
我可以做些什么来修复错误?
以下答案的结果:
【问题讨论】: