php - GroupBy 和 where 条件 NOT IN 不能同时工作

标签 php mysql database cakephp

您好,我正在尝试根据距离从数据库中获取结果,并且也不想在返回数据中包含某些 id 存在的行。但问题是,如果我进行分组,那么它会忽略 WHERE 条件。

这是我的查询

SELECT ( 3959 * ACOS( COS( RADIANS(31.45583995) ) * COS( RADIANS( Room.lat ) )
                    * COS( RADIANS(Room.long) - RADIANS(73.12997248)) + SIN(RADIANS(31.45583995))
                    * SIN( RADIANS(Room.lat)))) AS distance, 
       `Room`.*, `User`.*, `Room`.`id` 
FROM `bring_messenger`.`room` AS `Room` 
LEFT JOIN `bring_messenger`.`user` AS `User` ON (`Room`.`user_id` = `User`.`id`) 
JOIN `bring_messenger`.`room_member` AS `RoomMember` ON (`RoomMember`.`room_id` = `Room`.`id`)   
WHERE ((`Room`.`user_id` NOT IN (2)) OR (`RoomMember`.`member_id` NOT IN (2)))  
GROUP BY distance 
HAVING distance < 100  
ORDER BY `distance` ASC

问题是它给了我包含user_id = 2的数据。但是,如果我删除 GROUP BY 条件,则条件会成功运行。

所以请帮助我如何不包含某些行并根据距离对结果进行排序。

最佳答案

分组依据与聚合函数一起使用,例如 SUM、AVG、MAX、MIN 和 COUNT 。 并且您将需要包含 Select 语句中提到的完整列组,除了一个列(通常是聚合函数的结果列)。房间和用户的不同组合可能存在相同的距离值,这会使 SQL 混淆根据距离的一个特定值获取房间和用户的哪一个数据。 分组示例:

SELECT 
c1, c2,..., cn, aggregate_function(ci)
FROM
table
WHERE
where_conditions
GROUP BY c1 , c2,...,cn;

关于php - GroupBy 和 where 条件 NOT IN 不能同时工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56661113/

相关文章:

php - mysql FOUND_ROWS() 返回错误值

c# - 从多个相似的未知数据库读取

database - Enterprise Architect 数据的自动备份

php - 继续查询,但显示错误

php - ical 文件必须有结束日期吗?

php - Jenkins 用户无法运行 composer install

php - 如何使用 PHP 切换多个提交按钮

PHP/jQuery : Ajax call & where to have my code?

php - 如何使用zend中的db-table定义数据库表中是否存在表记录

php - 查询自定义分类上的自定义字段?