2012-01-02 68 views
1

我有两个表:如何从两个表中获取数据作为一行

_____________________________ 
| wp_post  | wp_postmeta | 
|______________|_____________| 
| ID   | meta_id  | 
| post_title | post_id  | 
| post_content | meta_key | 
| guid   | meta_value | 
|______________|_____________| 

wp_postmeta表包含这些行:

| meta_id | post_id | meta_key  | meta_value 
|---------|---------|-----------------|--------------- 
| 310  | 156  | level   | Blue 
| 311  | 156  |_post_main_intro | Some text 

我想要的结果是:

post_title, post_content, meta_value as color, meta_value as main_intro 

我试过不同的连接,但我不能很好地修复它。

SELECT a.post_title, b.meta_key, b.meta_value 
FROM wp_posts a 
LEFT JOIN wp_postmeta b ON a.ID = b.post_id 
WHERE b.meta_key = 'level' 

但是,这并不让我去取_post_main_intro数据:

我得到这是接近。

我会很高兴,如果有人能在正确的方向:)

更新
我目前的解决办法是这样的推我(和它的作品)

SELECT a.id, a.post_title, b.meta_value as color, c.meta_value as post_intro 
FROM wp_posts a 
LEFT JOIN wp_postmeta b ON a.ID = b.post_id 
LEFT JOIN wp_postmeta c ON a.ID = c.post_id 
WHERE b.meta_key = 'level' 
AND c.meta_key = '_post_main_intro' 

这是thew去哪里?

+1

没有在哪里b.meta_key ='_post_main_intro'工作..! – 2012-01-02 10:13:59

+0

您是否在寻找数据透视表?看到这个链接http://datacharmer.org/downloads/pivot_tables_mysql_5.pdf – Pavan 2012-01-02 10:13:59

+0

@Sudhir他希望水平和_post_main_intro在一行^^ – 2012-01-02 10:22:09

回答

2

您需要的元表两次查询:

SELECT a.post_title, b.meta_key, b.meta_value as level, c.meta_value as intro 
FROM wp_posts a 
LEFT JOIN wp_postmeta b ON a.ID = b.post_id 
LEFT JOIN wp_postmeta c ON a.ID = c.post_id 
WHERE b.meta_key = 'level' 
AND c.meta_key = '_post_main_intro' 

编辑:忘记在这列

+0

是的,这就是我最终使用的。我不确定这是否是最好的解决方案。但它的作品:) – Steven 2012-01-02 10:25:26

0

尝试:

 

SELECT a.post_title, b.meta_key, b.meta_value 
FROM wp_posts a 
LEFT JOIN wp_postmeta b ON (a.ID = b.post_id) 
WHERE b.meta_key = 'level' OR b.meta_key = '_post_main_intro' 
 
+0

好吧,这可能有帮助 – 2012-01-02 10:27:46

0

第三个表,因为你已经限制搜索到'级别'

WHERE b.meta_key = 'level' 

只要删除该部分,它应该给你所有

相关问题