php - MySql + PHP Group by,Having 和 Order By 一起使用返回 - 没有结果

标签 php mysql

我正在尝试进行查询以获得给定坐标的最近(按公里 -> 半径)用户。 一切正常,但因为我要保存最后 10 个位置,所以我想在单个查询中获取每个用户的最后一个位置。

   SELECT `id`, `user_id`, (6371 * acos( cos( radians(42.698201) ) * cos( radians(map_lat) ) * 
 cos( radians(map_lon) - radians(23.318825)) + sin(radians(42.698201)) *
 sin(radians(map_lat)) )) as distance, `map_lat`, `map_lon`, `date_added`
FROM (`map_locations`)
WHERE `user_id` !=  '3'
HAVING `distance` < 1000
ORDER BY `date_added` desc

这会正确返回具有所需距离的每一行。

现在我想GROUP BY user_id 举个例子,如果有 2 个唯一用户 -> 获取他们最后的位置 按 date_added

我想要的结果示例:

[0] => stdClass Object
        (
            [id] => 22
            [user_id] => 1
            [distance] => 1.4498781932309621
            [map_lat] => 42.7028
            [map_lon] => 23.3022
            [date_added] => 2017-09-07 14:45:21
        )

    [1] => stdClass Object
        (
            [id] => 21
            [user_id] => 2
            [distance] => 912.4120338405637
            [map_lat] => 43.4124
            [map_lon] => 12.1231
            [date_added] => 2017-09-07 14:24:59
        )

不幸的是,当我添加 Group By 语句时,我得到了 0 个结果,因为每个用户都获得了第一个结果(排序确实不起作用)。

我的研究是,如果 Group Bydate_added 分组结果正常工作,Having 会在它之后正常工作

换句话说:如果每个用户的最后位置符合距离标准,则希望获取所有唯一用户及其最后位置。

最佳答案

你试过这样吗...

SELECT distinct `user_id`, `id`,
(6371 * acos( cos( radians(42.698201) ) * cos( radians(map_lat) ) * 
cos( radians(map_lon) - radians(23.318825)) + sin(radians(42.698201)) *
sin(radians(map_lat)) )) as distance, `map_lat`, `map_lon`, `date_added`
FROM (`map_locations`)
WHERE `user_id` !=  '3'
GROUP BY `user_id`
HAVING `distance` < 1000
ORDER BY `date_added` desc

关于php - MySql + PHP Group by,Having 和 Order By 一起使用返回 - 没有结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46112637/

相关文章:

php - 从 PHP SQL 查询迁移到 MySQL 存储过程的问题

php - 如何使用 UTF-8 字符串在 PHP 中使用文件系统函数?

php - Opencart 3 产品不获取数据 mysql 查询不显示产品

mysql - 在 SSRS/MySQL 上检索行数

sql - 标记以及如何测试标记是否存在

php - Google API PHP 离线访问, "invalid_grant: Code was already redeemed"

java - 安卓 KeyPairGenerator + php openssl_public_encrypt

php - 存储过程调用后 Codeigniter DB 错误

mysql - Select X as Y query with Where, Having AND ORDER BY Y 给出 1292 警告但没有 ORDER BY 没问题

MySQL - "exact match"针对某个值