SQL - группировка по другой инструкции SQL с несколькими строками - PullRequest
1 голос
/ 07 марта 2019

Я пытаюсь заставить оператор 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      |
|---------------------|------------------|

Возможно ли это?

1 Ответ

0 голосов
/ 07 марта 2019

Просто включите вторую JOIN, чтобы получить ссылку:

SELECT c.meta_value as city, Count(*) as Amount 
FROM wp_votes v LEFT JOIN
     wp_postmeta l
     ON v.`post_id` = l.`post_id` AND
        l.meta_key = 'location' LEFT JOIN
     wp_postmeta c
     ON l.id = c.`post_id` AND
        c.meta_key = 'city'
WHERE v.`post_id` IS NOT NULL AND v.`post_id` <> 0
GROUP BY c.meta_value
ORDER BY Amount DESC
LIMIT 50;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...