Я пытаюсь заставить оператор SQL работать в WordPress, группируя различные мета-столбцы.
У меня есть одна таблица с голосами, одна таблица с местоположениями и одна таблица со ссылками на некоторые города (каждый город может содержать несколько местоположений).
Я пытаюсь сгруппировать все голоса по каждому крупному городу, но у меня возникают проблемы с объединением двух операторов SQL в один.
Вот запрос, чтобы получить 50 лучших мест с точки зрения количества голосов:
SELECT Count(*) as Amount, meta.meta_value as Location FROM wp_votes as votes
LEFT JOIN wp_postmeta as meta ON votes.`post_id` = meta.`post_id`
WHERE meta.meta_key = 'location'
AND votes.`post_id` IS NOT NULL AND votes.`post_id` <> 0
GROUP BY meta.meta_value
ORDER BY Amount DESC
LIMIT 50;
Это возвращает ответ, подобный этому:
|---------------------|------------------|
| Amount | meta_value |
|---------------------|------------------|
| 1250 | Brooklyn |
|---------------------|------------------|
| 400 | Manhattan |
|---------------------|------------------|
| 300 | Chicago |
И здесьэто запрос, чтобы получить города на основе местоположения.Он возвращает список городов (в приведенном выше примере он просто вернет Нью-Йорк), а два местоположения «Бруклин» и «Манхэттен» будут «включены» в Нью-Йорк.
SELECT meta_value FROM wp_posts as location
LEFT JOIN wp_postmeta as city ON city.`post_id` = location.`ID`
WHERE city.`meta_key` = 'reference'
GROUP BY city.`meta_value`;
Идея состоит в том, чтобы сопоставить эти два запроса вместе, чтобы в случае совпадения местоположения в первом запросе и местоположения во втором запросе группировались строки по названию городавместо.
Таким образом, результат для комбинированных запросов будет:
|---------------------|------------------|
| Amount | meta_value |
|---------------------|------------------|
| 1650 | New York |
|---------------------|------------------|
| 300 | Chicago |
|---------------------|------------------|
Возможно ли это?