2

2つのテーブルを持つMySQLDBがあります。最初の表:

Posts                                    
ID                      
post_title                      
post_content 
... etc

そして、追加データを含む2番目のテーブル:

Postmeta
ID
Post_ID (FK)
meta_key
meta_value

必要なデータはmeta_key/valueのペアにあります。ただし、このDBは、2番目のテーブルの各行に1つの情報しか含まれないように編成されています。

例(2番目の表):

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など)のデータが何度も繰り返されます。ただし、最初のテーブルのデータは1回だけ必要ですが、2番目のテーブルのすべての追加データは最初のテーブルのIDに関連しています。

これらすべてをどのようにフィルタリングする必要がありますか?いくつかのphpループかもしれませんか?

4

3 に答える 3

1

次のようなmysqlgroup_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 に答える