【问题标题】:Combining multiple where conditions in mysql SELECT query在mysql SELECT查询中组合多个where条件
【发布时间】:2013-12-13 22:55:23
【问题描述】:

这是我的问题:

我有一个数据库表,其中有经纬度和时间戳。我需要能够使用 PHP 搜索此表。查询会在特定范围内查找具有纬度和经度的行,并且除此之外,还要在特定时间范围内查找行。

我发现两个单独的查询可以在浏览互联网时起作用,但我找不到一个明确的方法来组合多个条件。

这两个查询是:

SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) *
  cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * 
  sin( radians( lat ) ) ) ) AS distance
FROM markers
HAVING distance < 25
ORDER BY distance
LIMIT 0 , 20;

在此处输入代码

SELECT * FROM `table` WHERE `date_field` BETWEEN 'date1' AND 'date2'

我需要找到时间戳、纬度和经度在范围内的前 20 个结果。 谢谢!

编辑:所有字段都在同一个表中。

【问题讨论】:

    标签: mysql select where


    【解决方案1】:

    如果所有数据都在同一个表中,你可以这样做:

    SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance
    FROM markers
    WHERE date_field BETWEEN 'date1' AND 'date2'
    HAVING distance < 25
    ORDER BY distance
    LIMIT 0 , 20;
    

    【讨论】:

    • 请注意,不允许在 WHERE 子句中引用列别名。原因是在评估 WHERE 子句时,列值可能尚未确定(想想sum(num) as total
    • @MostyMostacho,我刚刚复制并粘贴了 OP 的 SELECT 声明,因为他就是这样。我只是展示了如何组合这两个不同的查询。如果您认为它确实需要它,请随时编辑。 'date1''date2' 也是不允许的,但这也是 OP 拥有它的方式:)
    • 完成。请注意,OP 在 where 子句中没有 distance 字段是有原因的(原因是我的第一条评论)。
    • 那么共识是什么?上述查询是否有效?
    • 没关系,我明白了!我将中心坐标与应该来自表字段的值混合在一起。非常感谢您的帮助!
    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    相关资源
    最近更新 更多