0

私は自分のテーブルで正規化を行っています:

から :tb_1

===================================
| id | doc_name | title  | author |
===================================
| 1  | doc1     | title1 | author1|
|    |          |        | author2|
| 2  | doc2     | title2 | author3|
|    |          |        | author4|
===================================

なる :

tb_a                            tb_b
=======================       =========================
|id_a|doc_name| title |       |id_b| doc_name| author |
=======================       =========================
| 1  | doc1   | title1|       |  1 | title1  |author1 |
| 2  | doc2   | title2|       |  2 | title1  |author2 |
=======================       |  3 | title2  |author3 |
                              |  4 | title2  |author2 |
                              =========================

次のような結果を表示したい:

doc1 title1 author1 author2

doc2 title2 author3 author4

ここにコードがあります:

$query = mysql_query(" SELECT tb_a.doc_name, tb_a.title,
                              tb_b.doc_name, tb_b.author
                       FROM tb_a
                       JOIN  tb_b ON tb_a.doc_name = tb_b.doc_name ");
while ($row = mysql_fetch_array($query)) {
   $doc     = $row['doc_name'];
   $title   = $row['title'];
   $author  = $row['author'];

   echo $doc; echo $title ; echo $author;
}

しかし、結果は次のとおりです。 doc1 title1 author1 doc1 title1 author2 doc2 title2 author3 doc2 title2 author4

私を助けてください、どうもありがとうございました:)

4

2 に答える 2

0

テーブルをピボットしようとしています。どのように出力したいかはわかりませんが、 mysql を使用しているため、 group_concat()を使用できます。

次のようになります

   SELECT tb1.doc, tb1.title, group_concat(tb2.author)
     FROM tb1
     JOIN tb2 ON tb1.id = tb2.id
 GROUP BY tb1.doc, tb1.title
于 2012-09-29T23:37:05.930 に答える
0
SELECT tb_a.doc_name, tb_a.title, GROUP_CONCAT(tb_b.author) authors
FROM tb_a
JOIN tb_b ON tb_a.title = tb_b.doc_name
GROUP BY tb_a.doc_name, tb_a.title
于 2012-09-30T00:51:09.390 に答える