gpt4 book ai didi

MySQL 为空响应返回 0

转载 作者:行者123 更新时间:2023-11-28 23:21:38 25 4
gpt4 key购买 nike

我有一个 mySQL 请求,如下所示:

SELECT
COUNT(*) AS cnt,
(3595 *
acos(
cos(radians({$lat1}))
* cos(radians(lattitude))
* cos(radians(longitude) - radians({$lon1}))
+ sin(radians({$lat1}))
* sin(radians(lattitude))
)
) AS distance,
status
FROM
members
WHERE
status in ('married', 'single', 'divorced')
GROUP BY
status
HAVING
distance < 50

这是由我的 AJAX 请求调用的,它是这样完成的,例如:

success: function(data){
$("#count_marriedpeople").html(data[0].cnt);}

这段代码有一些问题。值 {$lat1}{$lon1} 对应于输入值。这个想法是统计一个给定纬度和经度坐标 50 英里范围内的所有人。

我现在遇到的问题是,如果结果与标准中的所有内容都不匹配,我会收到一个无法匹配的错误,并且我的所有请求都会失败。

我已经尝试执行 SELECT IF ISNULL,但问题(据我所知)是代码给出了一个空结果,而不是 null。因此,IFNULL 回退将不起作用。

我该如何修复这段代码,以便如果 marriedsingledivorced 没有任何值,那么它们将简单地返回0,不会破坏我的查询?

最佳答案

一个大问题...查询不会“统计 50 英里内的人数”。 distance 表达式的返回值针对组中的单个 行。 HAVING 子句中的条件将应用于该值。

要回答您提出的问题...您需要一个行源,它提供在没有匹配的行时要返回的状态。

作为返回指定结果的方法示例,如下所示:

 SELECT s.status
, COUNT(m.status) AS cnt
FROM ( SELECT _latin1'married' AS status
UNION ALL SELECT _latin1'single'
UNION ALL SELECT _latin1'divorced'
) s
LEFT
JOIN members m
ON m.status = s.status
AND (3595 *
ACOS(
COS(RADIANS({ $lat1 }))
* COS(RADIANS(m.lattitude))
* cos(radians(m.longitude) - RADIANS({ $lon1 }))
+ SIN(RADIANS({ $lat1 }))
* SIN(RADIANS(m.lattitude))
)
) < 50
GROUP BY s.status

内联 View s 返回三行,即我们要返回的状态的三个值。

成员外部联接 返回任何“匹配”行。条件位于外连接的 ON 子句中,而不是 WHERE 子句中。

用于折叠行并获取 COUNT 聚合的 GROUP BY。

这只是一种可能模式的示例。

还有其他查询模式将返回等效结果。

关于MySQL 为空响应返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41318216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com