2013-11-04 30 views
0

我得到了3个tabels:获取数据

  • wp_posts
  • wp_metadata
  • 用户

当我从 “wp_posts” 我的查询我使用LEFT JOIN从“wp_metadata”获得的数据,但我怎么能得到从3 TABL值e“用户”?

例子: 我有我的wordpressblog一个职位。在那篇文章中,我有一些元字段 - 其中一个叫做“userid”。我的用户位于wordpress之外的表格中。如何从表格“用户”中获取用户名,其中后置元键“userid”等于“users” - 表行ID?

这里是我的SQL请求,因为它是现在:

SELECT ID, post_title, 
    post_excerpt, 
    post_content, 
    m.meta_value AS placeid, 
    i.meta_value AS photoid, 
    r.meta_value AS rating, 
    u.meta_value AS userid, 
    b.username 
FROM wp_posts p 
LEFT JOIN wp_postmeta m ON (m.post_id = p.ID) 
LEFT JOIN wp_postmeta i ON (i.post_id = p.ID) 
LEFT JOIN wp_postmeta r ON (r.post_id = p.ID) 
JOIN wp_postmeta u ON (u.post_id = p.ID) 
LEFT JOIN brugere b ON (b.id = userid) 
WHERE m.meta_key = 'placeid' 
AND i.meta_key = 'photoid' 
AND r.meta_key = 'rating' 
AND u.meta_key = 'userid' 
AND post_status = 'publish' 
ORDER BY ID DESC LIMIT 50; 

我想要一个查询,因为我使用一个“打印json_encode”查询。

+0

这里是移动何在一个尝试为ON:'LEFT JOIN wp_postmeta米ON(m.post_id = p.ID)WHERE m.meta_key =“placeid''但没有结果。我也尝试将LEFT JOIN更改为INNER JOIN,但也无效。 – user2908800

+0

好吧,现在我得到一些结果!但是,我如何获得b.username。我的代码有'LEFT JOIN brugere b ON(b.id = userid)'或'LEFT JOIN brugere b ON(b.id = u.meta_value)'不能工作。我做错了什么? – user2908800

+0

@strawberry这里:http://sqlfiddle.com/#!2/6ce9a/2 – user2908800

回答

0
SELECT p.* 
    , x.placeid 
    , x.photoid 
    , x.userid 
    , x.rating 
    , u.username 
    FROM wp_posts p 
    LEFT 
    JOIN 
    (SELECT post_id 
      , MAX(CASE WHEN meta_key = 'placeid' THEN meta_value END) placeid 
      , MAX(CASE WHEN meta_key = 'photoid' THEN meta_value END) photoid 
      , MAX(CASE WHEN meta_key = 'userid' THEN meta_value END) userid 
      , MAX(CASE WHEN meta_key = 'rating' THEN meta_value END) rating 
     FROM wp_postmeta 
     GROUP 
      BY post_id 
    ) x 
    ON x.post_id = p.id 
    LEFT 
    JOIN brugere u 
    ON u.id = x.userid; 

+----+--------------+--------------+----------------+-------------+-----------+---------+---------+--------+--------+----------+ 
| ID | post_content | post_title | post_excerpt | post_status | post_type | placeid | photoid | userid | rating | username | 
+----+--------------+--------------+----------------+-------------+-----------+---------+---------+--------+--------+----------+ 
| 1 | Content 1 | Post title 1 | Post ecxerpt 1 | publish  | post  | 101  | 102  | 2  | 4  | Bruger 2 | 
| 2 | Content 2 | Post title 2 | Post ecxerpt 2 | publish  | post  | 201  | 202  | 3  | 3  | Bruger 3 | 
| 3 | Content 3 | Post title 3 | Post ecxerpt 3 | publish  | post  | 301  | 302  | 3  | 2  | Bruger 3 | 
| 4 | Content 4 | Post title 4 | Post ecxerpt 4 | publish  | post  | NULL | NULL | NULL | NULL | NULL  | 
| 5 | Content 5 | Post title 5 | Post ecxerpt 5 | publish  | post  | NULL | NULL | NULL | NULL | NULL  | 
+----+--------------+--------------+----------------+-------------+-----------+---------+---------+--------+--------+----------+ 

http://sqlfiddle.com/#!2/f517a/10

+0

对不起,错误的ID - 现在我改变了post_id。在wp_posts 1,2和3中应该有3个帖子 - 所有这些帖子在wp_postmeta(placeid,photoid,userid,rating)中都有4个字段。 – user2908800

+0

小提琴是一样的:http://sqlfiddle.com/#!2/f517a/1(我已经对它进行更新):) – user2908800

+0

大 - 我会仔细看,后来测试它,谢谢。我会回来的。 – user2908800