我有一个带有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循环?
答案 0 :(得分: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中拆分结果,您可以轻松使用爆炸函数来形成结果信息的数组。
答案 1 :(得分:0)
SELECT * FROM Posts, Postmeta
WHERE Posts.Post_id = Postmeta.Post_id
GROUP BY Posts.Post_id
答案 2 :(得分:0)
使用SELECT DISTINCT
代替SELECT