我有一个相当,对我来说,复杂的 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