0

私は3つのテーブルを手に入れました:

  • wp_posts
  • wp_metadata
  • ユーザー

「 wp_posts 」からクエリを取得するとき、左結合を使用して「 wp_metadata 」からデータを取得していますが、3番目のテーブル「 users 」から値を取得するにはどうすればよいですか?

例: wordpressblog に 1 つの投稿があります。その投稿には、いくつかのメタフィールドがあります。そのうちの 1 つは「userid」と呼ばれます。私のユーザーはワードプレスの外のテーブルにあります。ポストメタキー「userid 」が「 users 」テーブルの行 IDと等しいテーブル「 users 」からユーザーのユーザー名を取得するにはどうすればよいですか?

現在の私の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;

「 print json_encode 」でクエリを使用しているため、1つのクエリが必要です。

4

1 に答える 1

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

于 2013-11-05T14:20:59.660 に答える