2
表1
| ID | Post_Name | Post_Status | Parent_ID | Post_Content | Post_Type |
+ ---- + ------------ + ------------- + ----------- + ----- --------- + ----------- +
| 1 | ジョンサンプル| 公開| 0 | コンテンツテキスト| 人|
| 2 | | 継承| 1 | image1.jpg | 添付ファイル|
| 3 | | 継承| 1 | image2.jpg | 添付ファイル|
| 4 | | 継承| 1 | image3.jpg | 添付ファイル|
| 5 | サンプルをマーク| 公開| 0 | テキストをマーク| 人|
| 6 | | 継承| 5 | image1.jpg | 添付ファイル|
| 7 | | 継承| 5 | image2.jpg | 添付ファイル|
| 8 | | 継承| 5 | image3.jpg | 添付ファイル|

表2
| meta_id | post_id | meta_key | meta_value |
+ --------- + ---------- + ---------------- + ----------- ------------ +
| 1 | 1 | 住所| サンプルストリート、国|
| 2 | 1 | 電話| 10000000000000 |
| 3 | 1 | セックス| 男性|
| 4 | 1 | 一次写真| 2 |
| 5 | 2 | サムネイル| John_thumbnail.jpg |
| 6 | 2 | meta_data | data_data_data |
| 7 | 5 | 住所| マークストリート、国|
| 8 | 5 | 電話| 20000000000000 |
| 9 | 5 | セックス| 男性|
| 10 | 5 | 一次写真| 6 |
| 11 | 6 | サムネイル| Mark_thumbnail.jpg |
| 12 | 6 | meta_data | data_data_data |

このように表示したい

名前:ジョンサンプル
コメント:コンテンツテキスト
アドレス:サンプルストリート、フロリダ
電話:10101010101010
性別:男性
サムネイル:John_thumbail.jpg
写真:images1.jpg、images2.jpg、images3.jpg

名前:マークサンプル
コメント:マークテキスト
アドレス:マークストリート、フロリダ
電話:20101010101010
性別:男性の
サムネイル:Mark_thumbail.jpg
写真:images1.jpg、images2.jpg、images3.jpg

サムネイルのリンクをご覧ください

4

3 に答える 3

3

これを試して:

SELECT
  t.Post_Name AS Name,
  MAX(CASE WHEN t2.meta_key = 'Address' THEN t2.meta_value END) AS 'Address',
  MAX(CASE WHEN t2.meta_key = 'Phone' THEN t2.meta_value END) AS 'Phone',
  MAX(CASE WHEN t2.meta_key = 'Sex' THEN t2.meta_value END) AS 'Sex',
  GROUP_CONCAT(DISTINCT p.Post_Content  SEPARATOR ',') AS Photo
FROM Table1 p
INNER JOIN table1 t ON p.parent_ID = t.ID
INNER JOIN Table2 t2 ON t.Id = t2.post_id
GROUP BY p.Post_Name;

SQLフィドルデモ

これはあなたに与えるでしょう:

|        NAME |               ADDRESS |          PHONE |  SEX |                            PHOTO |
--------------------------------------------------------------------------------------------------
| John Sample | Sample Street,Country | 10000000000000 | Male | image3.jpg,image2.jpg,image1.jpg |

次に、PHPを使用して、希望どおりに表示できます。


アップデート

の値をuser commentコメントとして表示する場合は、次のように実行できます。

SELECT
  t.Post_Name AS Name,
  MAX(CASE WHEN t2.meta_key = 'Address' THEN t2.meta_value END) AS 'Address',
  MAX(CASE WHEN t2.meta_key = 'Phone' THEN t2.meta_value END) AS 'Phone',
  MAX(CASE WHEN t2.meta_key = 'Sex' THEN t2.meta_value END) AS 'Sex',
  GROUP_CONCAT(DISTINCT p.Post_Content  SEPARATOR ',') AS Photo,
  GROUP_CONCAT(DISTINCT t.post_Content) comment
FROM Table1 p
INNER JOIN table1 t ON p.parent_ID = t.ID
INNER JOIN Table2 t2 ON t.Id = t2.post_id
GROUP BY p.Post_Name;

更新されたSQLフィドルデモ


Update2:

更新されたサンプルデータに基づく:

SELECT
  p.Post_Name AS Name,
  MAX(CASE WHEN t.meta_key = 'Address' THEN t.meta_value END) AS 'Address',
  MAX(CASE WHEN t.meta_key = 'Phone' THEN t.meta_value END) AS 'Phone',
  MAX(CASE WHEN t.meta_key = 'Sex' THEN t.meta_value END) AS 'Sex',
  GROUP_CONCAT(DISTINCT c.Post_Content  SEPARATOR ',') AS Photo,
  GROUP_CONCAT(DISTINCT p.post_Content) comment
FROM
(
  SELECT *
  FROM Table1 
  WHERE parent_id = 0
) AS p
INNER JOIN table1 AS c ON p.ID      = c.parent_ID
INNER JOIN table2 AS t ON t.post_id = p.id
GROUP BY p.post_Name;

SQLフィドルデモ

これはあなたに与えるでしょう:

|        NAME |               ADDRESS |          PHONE |  SEX |                            PHOTO |      COMMENT |
-----------------------------------------------------------------------------------------------------------------
| John Sample | Sample Street,Country | 10000000000000 | Male | image2.jpg,image1.jpg,image3.jpg | Content Text |
| Mark Sample |   Mark Street,Country | 20000000000000 | Male | image3.jpg,image1.jpg,image2.jpg |   Mark  Text |

アップデート2

更新されたデータについては、次のことを試してください。

SELECT 
  t1.*,
  t2.meta_value AS 'Thumbnail'
FROM
(
  SELECT
    p.Post_Name AS Name,
    MAX(CASE WHEN t.meta_key = 'Address' THEN t.meta_value END) AS 'Address',
    MAX(CASE WHEN t.meta_key = 'Phone' THEN t.meta_value END) AS 'Phone',
    MAX(CASE WHEN t.meta_key = 'Sex' THEN t.meta_value END) AS 'Sex',
    MAX(CASE WHEN t.meta_key = 'Primary pic' THEN t.meta_value END) AS 'Primary_pic',
    GROUP_CONCAT(DISTINCT c.Post_Content  SEPARATOR ',') AS Photo,
    GROUP_CONCAT(DISTINCT p.post_Content) comment
  FROM
  (
    SELECT *
    FROM Table1 
    WHERE parent_id = 0
  ) AS p
  INNER JOIN table1 AS c ON p.ID      = c.parent_ID
  INNER JOIN table2 AS t ON t.post_id = p.id
  GROUP BY p.post_Name
) AS t1
INNER JOIN table2 t2  ON t1.Primary_pic = t2.post_id
                     AND t2.meta_key = 'Thumbnail';

更新されたSQLフィドルデモ

これはあなたに与えるでしょう:

|        NAME |               ADDRESS |          PHONE |  SEX | PRIMARY_PIC |                            PHOTO |      COMMENT |          THUMBNAIL |
----------------------------------------------------------------------------------------------------------------------------------------------------
| John Sample | Sample Street,Country | 10000000000000 | Male |           2 | image3.jpg,image1.jpg,image2.jpg | Content Text | John_thumbnail.jpg |
| Mark Sample |   Mark Street,Country | 20000000000000 | Male |           6 | image1.jpg,image2.jpg,image3.jpg |   Mark  Text | Mark_thumbnail.jpg |


アップデート3

この新しい列では、次のように行ったようmeta_dataに、2番目のテーブルにもう1つ結合する必要があります。primary pic

SELECT 
  t1.Name,
  t1.Address,
  t1.Phone,
  t1.Sex,
  t1.Photo,
  t1.Comment,
  t2.meta_value AS 'Thumbnail',
  t3.meta_value AS 'meta_data'
FROM
(
  SELECT
    p.Post_Name AS Name,
    MAX(CASE WHEN t.meta_key = 'Address' THEN t.meta_value END) AS 'Address',
    MAX(CASE WHEN t.meta_key = 'Phone' THEN t.meta_value END) AS 'Phone',
    MAX(CASE WHEN t.meta_key = 'Sex' THEN t.meta_value END) AS 'Sex',
    MAX(CASE WHEN t.meta_key = 'Primary pic' THEN t.meta_value END) AS 'Primary_pic',
    GROUP_CONCAT(DISTINCT c.Post_Content  SEPARATOR ',') AS Photo,
    GROUP_CONCAT(DISTINCT p.post_Content) comment
  FROM
  (
    SELECT *
    FROM Table1 
    WHERE parent_id = 0
  ) AS p
  INNER JOIN table1 AS c ON p.ID      = c.parent_ID
  INNER JOIN table2 AS t ON t.post_id = p.id
  GROUP BY p.post_Name
) AS t1
INNER JOIN table2 t2  ON t1.Primary_pic = t2.post_id
                     AND t2.meta_key = 'Thumbnail'
INNER JOIN table2 t3  ON t1.Primary_pic = t3.post_id
                     AND t3.meta_key = 'meta_data';

このような

これはあなたに与えるでしょう:

|        NAME |               ADDRESS |          PHONE |  SEX |                            PHOTO |      COMMENT |          THUMBNAIL |      META_DATA |
-------------------------------------------------------------------------------------------------------------------------------------------------------
| John Sample | Sample Street,Country | 10000000000000 | Male | image1.jpg,image2.jpg,image3.jpg | Content Text | John_thumbnail.jpg | data_data_data |
| Mark Sample |   Mark Street,Country | 20000000000000 | Male | image2.jpg,image3.jpg,image1.jpg |   Mark  Text | Mark_thumbnail.jpg | data_data_data |
于 2013-02-04T13:16:55.663 に答える
1

以下のコードを試してください

SELECT    Table1.ID,
Table1.POST_NAME,
Table1.Post_Status,
Table1.Parent_ID,
Table1.Post_Content,
Table1.Post_Type,
Table2.meta_id,
Table2post_id,  
Table2meta_key,
Table2.meta_value       
FROM TABLE2,TABLE1
WHERE TABLE1.id= TABLE2.post_id 
于 2013-02-04T13:32:53.860 に答える
0

SQLでJOINSを調べるので、次のようになります。

SELECT post.post_name, 
       phone.meta_value 
FROM   table_1 AS post 
       LEFT JOIN table_2 AS phone 
              ON post.id = phone.id 
                 AND phone.meta_key = "phone" 

必要に応じて編集します。

于 2013-02-04T13:17:58.317 に答える