2012-09-08 133 views
2

我有一個帶有2個表的MySQL DB。 第一個表:需要關於從數據庫檢索數據的建議

Posts          
ID      
post_title      
post_content 
... etc 

而第二表具有附加數據:

Postmeta 
ID 
Post_ID (FK) 
meta_key 
meta_value 

,我需要在meta_key /值對中的數據。但是這個數據庫的組織方式是第二個表中的每一行只有一條信息。重複

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

您應該使用查詢您發佈獲取所有數據,然後在你的PHP應用程序,你應該在你想要的格式,輸出從各數據第一個表格是第二個表格中相應項目的標題。您不應該在SQL中格式化數據,它不適用于格式化數據。 –

回答

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中,你可以很容易地使用爆炸功能的結果,形成的結果信息的數組。

0
SELECT * FROM Posts, Postmeta 
WHERE Posts.Post_id = Postmeta.Post_id 
GROUP BY Posts.Post_id  
0

使用SELECT DISTINCT,而不是僅僅SELECT