SQL с GROUP BY и ORDER BY - PullRequest
       17

SQL с GROUP BY и ORDER BY

1 голос
/ 23 ноября 2011

Я пытаюсь отобразить записи из таблицы, сгруппированные по определенным мета значениям из другой таблицы, и упорядоченные по другим мета значениям или идентификатору записи, если выбран «недавний» порядок.

Лучшее, что я придумал, это:

SELECT `posts`.`id_post`, 
       m1.value AS REGIUNE, 
       m2.value AS JUDET, 
       m3.value AS LOCALITATE, 
       MAX(`posts`.`id_post`) AS ORDERBY 
FROM `posts`
INNER JOIN `posts_meta` m1
    ON(`posts`.`id_post`=m1.`id_post`)
INNER JOIN `posts_meta` m2
    ON(`posts`.`id_post`=m2.`id_post`)
INNER JOIN `posts_meta` m3
    ON(`posts`.`id_post`=m3.`id_post`)
WHERE
    `posts`.`type` = 'published'
AND ( m1.`meta` = 'regiune' )
AND ( m2.`meta` = 'judet' )
AND ( m3.`meta` = 'localitate' )
GROUP BY  posts.id_post
ORDER BY ORDERBY DESC

Однако это работает только в том случае, если мы не группируемся по каким-либо мета-значениям (m1.value, m2.value или m3.value).

1 Ответ

0 голосов
/ 23 ноября 2011

Этот должен работать ...

SELECT `posts`.`id_post`, 
       m1.value AS REGIUNE, 
       m2.value AS JUDET, 
       m3.value AS LOCALITATE, 
       MAX(`posts`.`id_post`) AS ORDERBY 
FROM `posts`
INNER JOIN `posts_meta` m1
    ON(`posts`.`id_post`=m1.`id_post`)
INNER JOIN `posts_meta` m2
    ON(`posts`.`id_post`=m2.`id_post`)
INNER JOIN `posts_meta` m3
    ON(`posts`.`id_post`=m3.`id_post`)
WHERE
    `posts`.`type` = 'published'
AND ( m1.`meta` = 'regiune' )
AND ( m2.`meta` = 'judet' )
AND ( m3.`meta` = 'localitate' )
GROUP BY  1,2,3,4
ORDER BY `posts`.`id_post` DESC
...