2

我有一个带有 2 个表的 MySQL 数据库。第一张表:

Posts                                    
ID                      
post_title                      
post_content 
... etc

第二个表有附加数据:

Postmeta
ID
Post_ID (FK)
meta_key
meta_value

我需要的数据在 meta_key/value 对中。但是这个数据库的组织方式是第二个表中的每一行只有一条信息。

例如(第二张表):

ID      Post_ID   meta_key        meta_value
1          5      info                 30

ID      Post_ID   meta_key        meta_value
2          5      additional_info      40

ID      Post_ID   meta_key        meta_value
3          6      info                 50

ID      Post_ID   meta_key        meta_value
4          6      additional_info      60

所以如果我运行查询

SELECT 
posts.id, 
posts.post_date, 
posts.post_author, 
posts.post_content, 
posts.post_title, 
postmeta.meta_id, 
postmeta.meta_key, 
postmeta.meta_value

FROM posts INNER JOIN postmeta ON posts.id = postmeta.post_id

WHERE posts.post_type = 'post'

我取回了我需要的所有数据,但来自第一个表(ID/post_content 等)的数据重复了很多次。但我只需要第一个表中的数据一次,但第二个表中的所有其他数据都与第一个表中的 ID 相关。

我应该如何过滤所有这些东西?可能是一些php循环?

4

3 回答 3

1

您可以像这样使用mysql group_concat函数:

select
    posts.id, 
    posts.post_date, 
    posts.post_author, 
    posts.post_content, 
    posts.post_title, 
    group_concat(postmeta.meta_id) as metaID, 
    group_concat(postmeta.meta_key) as metaKey, 
    group_concat(postmeta.meta_value_ as metaValue
from
    posts 
        INNER JOIN postmeta 
            ON posts.id = postmeta.post_id
where
    posts.post_type = 'post'
group by
    posts.id, 
    posts.post_date, 
    posts.post_author, 
    posts.post_content, 
    posts.post_title

要在 PHP 中拆分结果,您可以轻松地使用explode 函数来形成结果信息的数组。

于 2012-09-08T13:14:32.090 回答
0
SELECT * FROM Posts, Postmeta 
WHERE Posts.Post_id = Postmeta.Post_id 
GROUP BY Posts.Post_id    
于 2012-09-08T14:03:11.477 回答
0

使用SELECT DISTINCT而不仅仅是SELECT

于 2012-09-08T14:07:15.783 回答