У меня для меня довольно сложный запрос mysql, на котором я полностью застрял и не могу найти ответ для онлайн.sql query with multiple where statements
Вот мой запрос:
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 заявление и что работает отлично. Поэтому, если я передаю только длинную или лат-часть, я получаю результаты. Только когда я пытаюсь сшить их вместе, я получаю разные результаты.
Спасибо за помощь заранее!
Структура таблицы выглядит следующим образом:
Таблица пунктов: ID item_name ITEM_DESCRIPTION
Таблица мета: 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
Можете ли вы конкретно уточнить, что происходит, когда вы «сшиваете их вместе»? Как выглядят данные, которые вы запрашиваете, и какие результаты вы получаете? – David
Мы можем предположить, что это не ошибка в mysql, поэтому вам нужно сказать, чего вы ожидали, и то, что вы заметили. Какие данные вы вводите в запрос? – tenfour
Вы ищете строку базы данных, где 'meta_key' - это' 'lat'' и' 'long''. Я не уверен, что это возможно ... – lonesomeday