Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在同一SQL查询中容纳多个HAVING子句_Php_Mysql - Fatal编程技术网

Php 如何在同一SQL查询中容纳多个HAVING子句

Php 如何在同一SQL查询中容纳多个HAVING子句,php,mysql,Php,Mysql,我一直很难让我的查询工作,并希望得到帮助。在较高的层次上,我尝试查询一个用户表,并根据一组条件+加上用户在指定的英里半径内这一事实返回结果,或者返回具有相同指定条件的用户的结果,而忽略英里半径要求 我上面提到的“特定标准”是 u.activated = 1 AND u.type LIKE ('%red%') 这是我的问题,我知道这不是我想要的方式 SELECT u.online, u.total_spend, u.name, u.address, u.city, u.state, u.zip,

我一直很难让我的查询工作,并希望得到帮助。在较高的层次上,我尝试查询一个用户表,并根据一组条件+加上用户在指定的英里半径内这一事实返回结果,或者返回具有相同指定条件的用户的结果,而忽略英里半径要求

我上面提到的“特定标准”是

u.activated = 1 AND u.type LIKE ('%red%')
这是我的问题,我知道这不是我想要的方式

SELECT u.online, u.total_spend, u.name, u.address, u.city, u.state, u.zip, u.type,
    u.activated, ( 3959 * ACOS( COS( RADIANS( 42.459080 ) ) * COS( RADIANS( u.lat ) ) * COS( RADIANS( u.lng ) - RADIANS( - 83.934013 ) ) + SIN( RADIANS( 42.459080 ) ) * SIN( RADIANS( u.lat ) ) ) ) AS distance,
    t.username, COUNT( t.active ) AS reviews
FROM testimonials AS t
RIGHT JOIN users AS u ON ( t.username = u.username ) 
WHERE u.activated =1
AND u.type LIKE (
'%red%'
)
AND (
u.online =1
OR u.online =0
)
GROUP BY IFNULL( t.username, UUID( ) ) 
HAVING distance <  '15'
ORDER BY total_spend DESC 
LIMIT 0 , 30
选择u.online、u.total\u Expense、u.name、u.address、u.city、u.state、u.zip、u.type、,
u、 激活,(3959*ACOS(弧度(42.459080))*COS(弧度(u.lat))*COS(弧度(u.lng)-弧度(-83.934013))+SIN(弧度(42.459080))*SIN(弧度(u.lat)))作为距离,
t、 用户名,计数(t.active)为评论
来自作为t的推荐书
以u-ON的身份右键加入用户(t.username=u.username)
其中,u.activated=1
和u型一样(
“%red%”
)
及(
u、 在线=1
或u.online=0
)
按IFNULL(t.username,UUID())分组
距离小于“15”的
按总花费说明排序的订单
限制0,30
我意识到让操作员处理已经提取的数据,这就是问题所在。我不明白的是,如何在忽略距离要求的情况下提取数据,而是在u.online=1的情况下提取用户,并将他们全部包含在同一个数据集中


提前感谢您的帮助

因为距离是经过计算的,所以您可以将原始查询包装在cte中,然后您可以使用where子句仅在u.online=1或距离<15时提取记录吗?通常,两个独立的
使用
联合选择
s,但您也可以在
HAVING
子句中使用
。谢谢Marcus。我最终通过一个工会解决了这个问题,它似乎工作得很好。感谢你们两位的建议