mysql - 带有多个where语句的sql查询

标签 mysql

对我来说,我有一个相当复杂的 mysql 查询,我完全陷入困境,无法在线找到任何答案。

这是我的查询:

SELECT
items.*
FROM
items
INNER JOIN
items_meta_data
WHERE
(
        (meta_key = 'lat' AND meta_value >= '55')
    OR
        (meta_key = 'lat' AND meta_value <= '65')
)
AND
(
        (meta_key = 'long' AND meta_value >= '20')
    OR
        (meta_key = 'long' AND meta_value <= '30')
)
GROUP BY
item_id

当然,我只用 1 条语句测试了查询,而且效果很好。所以,如果我只通过 long 或 lat 部分,那么我就会得到结果。只有当我尝试将它们缝合在一起时,才会得到不同的结果。

提前感谢您的帮助!

表结构如下:

Table items:
ID
item_name
item_description

Table meta:
meta_id
item_id
meta_key
meta_value

解决方案

对于有兴趣的人,我终于设法解决了这个问题。谢谢大家的帮助和内心。

SELECT
    SQL_CALC_FOUND_ROWS items.* 
FROM
    items
INNER JOIN
    items_meta ON (items.ID = items_meta.post_id)
INNER JOIN
    items_meta AS m1 ON (items.ID = m1.post_id)
WHERE
    1=1
    AND
    items.post_type = 'post'
    AND
    (items.post_status = 'publish')
    AND
    ( (items_meta.meta_key = 'lat' AND CAST(items_meta.meta_value AS SIGNED) BETWEEN '55'   AND '65')
    AND
    (m1.meta_key = 'long' AND CAST(m1.meta_value AS SIGNED) BETWEEN '20' AND '30') )
GROUP BY
    items.ID
ORDER BY
    items.date
DESC

最佳答案

您需要考虑 GROUP BY 发生在 WHERE 子句条件评估之后。并且 WHERE 子句始终只考虑一行,这意味着在您的查询中,meta_key 条件将始终阻止选择任何记录,因为 一列不能有一行有多个值

那么多余的 meta_value 检查呢?如果允许一个值小于和大于给定值,那么它的实际值根本无关紧要 - 可以省略检查。

根据您的一条评论,您想检查距离给定位置小于一定距离的地方。要获得正确的距离,您实际上必须使用某种适当的距离函数(参见例如 this question 了解详细信息)。但是这个 SQL 应该让你知道如何开始:

SELECT items.* FROM items i, meta_data m1, meta_data m2
    WHERE i.item_id = m1.item_id and i.item_id = m2.item_id
    AND m1.meta_key = 'lat' AND m1.meta_value >= 55 AND m1.meta_value <= 65
    AND m2.meta_key = 'lng' AND m2.meta_value >= 20 AND m2.meta_value <= 30

关于mysql - 带有多个where语句的sql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8645773/

相关文章:

mysql - key 1 的重复条目 '2014-02-28' 错误代码 : 1062

mysql - 如何在 Modx Revolution 中递归获取子 id 数组而不使用 getChildIds

php - 从查询 block 中随机选择一个数据

php - 使用 jQuery 函数从数据库下载文件

C# MySQL参数化查询问题

php - Doctrine 查询语言,两个连接查询

java - 验证用户输入 JDBC 的最佳方式?

mysql - 在 Drupal 7 主题中,drush 不起作用

mysql - 计算已知深度的层次结构中的值

java - 我的图书馆管理项目中出现 SQL 插入错误。我试图弄清楚自己,但多次失败。请帮助我