2011-11-23 127 views
1

我想从一个表中显示帖子从另一个表中的某些元值分组,并按其他元值或帖子ID排序,如果选择“最近”的顺序。SQL与GROUP BY和ORDER BY

我想出的最好的是:

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 

但是,这仅如果我们不被任何meta值(m1.value,m2.value或m3.value)分组工作。

+3

你可以张贴一些示例数据和预期的效果?你更有可能得到一个答案,如果你这样做... –

+0

@Adrian这里是一个链接,我想要得到什么,我得到:[链接](http://img214.imageshack.us/ img214/6563/aseqi.jpg) –

回答

0

这一个应该工作...

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 
+0

仍然不起作用,因为我只是从每个组中获得第一个帖子,而不是最后一个:( –

+0

您正在使用哪个数据库,以及您面临的错误是什么? – Teja

+0

i我正在使用MySQL,并且使用你的代码返回每一行的连接,而不是将它们分组到一起。下面是我得到的[示例](http://img214.imageshack.us/img214/6563/aseqi.jpg)从m1.value分组。 –