从第3个表中获取数据

时间:2013-11-04 23:00:10

标签: mysql

我有3个表格:

  • wp_posts
  • wp_metadata
  • 用户

当我从“ wp_posts ”获取查询时,我正在使用 LEFT JOIN 从“ wp_metadata ”获取数据,但是如何从第3个表“用户”中获取值?

实施例: 我的wordpressblog上有一个帖子。在那篇文章中我有一些元字段 - 其中一个叫做“ userid ”。我的用户位于wordpress之外的一个表中。如何从“用户”表中获取用户的用户名,其中后元键“用户ID ”等于“用户” “-tables行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 ”上使用查询。

1 个答案:

答案 0 :(得分: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