2

1つの共通フィールドを持つ2つのテーブルがあります。これらの2つのテーブル構造は次のとおりです。

表1

+--ID--+--Title----+----others---+
| 123  | Title 1   | other values|
| 124  | Title 2   | other values|
| 125  | Title 3   | other values|
| 126  | Title 4   | other values|
+------+-----------+-------------+

表2

+--ID--+--Tag ID--+----others---+
| 123  |   11     | other values|
| 123  |   12     | other values|
| 123  |   13     | other values|
| 123  |   14     | other values|
| 124  |   15     | other values|
| 124  |   16     | other values|
| 125  |   17     | other values|
| 126  |   18     | other values|
+------+----------+-------------+

以下の表のように、記事に11、12、13、14ID 123があることを示したいと思います。4 tags

+--Article ID--+--Article Title--+--Tags--+--Tag IDs------+
|     123      |    Title 1      |    4   | 11, 12, 13, 14|
|     124      |    Title 2      |    2   |     15, 16    |
|     125      |    Title 3      |    1   |        17     |
|     126      |    Title 4      |    1   |        18     |
+--------------+-----------------+--------+---------------+

私はPHPとMySQLに非常に慣れておらず、それを学ぼうとしています。

誰かが私が望ましい結果を得る方法を知るのを手伝ってください。

4

5 に答える 5

2

このクエリは機能するはずです(多少の調整が必要です)。

SELECT `ID` AS `t1`.`Article ID`, `t2`.`Title` AS `Article Title`, COUNT(`t2`.`ID`) AS `Tags`,
GROUP_CONCAT(`t2`.`ID`) AS `Tag IDs` FROM `Articles` AS `t1`
LEFT JOIN `Tags` AS `t2` ON `t1`.`ID` = `t2`.`ID`
GROUP BY `t1`.`ID`

この関数には他にもいくつかのオプションがありますGROUP_CONCATが、デフォルトは必要に応じて正常に機能するはずです。

于 2012-06-28T11:09:41.657 に答える
1
SELECT t1.id AS 'Article ID',
t1.title AS 'Article Title', 
count( t2.tag_id ) AS 'Tags', 
GROUP_CONCAT( t2.Tag_Id order by t2.Tag_id ASC) AS `Tag IDs`
FROM table1 t1
JOIN table2 t2 ON ( t1.id = t2.id )
GROUP BY t1.id;

これがうまくいくことを願っています!

于 2012-06-28T11:30:57.547 に答える
0

テーブルのマージはJOIN、(LEFT、RIGHT INNER)キーワードを使用して行われます。例えば:

SELECT T1.*, T2.*, COUNT(T2.ID) AS TAG_COUNT, GROUP_CONCAT(T2.ID) AS TAG_IDS
FROM TABLE1 T1
LEFT OUTER JOIN TABLE2 T2 
ON T1.TAG_ID = T2.ID

このタイプの結合構造は、結合自体が行われる共通のファイルがあることを示唆しています。あなたのテーブル構造では、最初のテーブルT1はArticleのテーブルであり、2番目のテーブルはTagsテーブルであると仮定します。この場合、T2のフィールドに対応するT1テーブルのフィールドが必要です。これはおそらくIDです。

編集:最後のステップとして、多くの回答が述べているように、目的の構造を実現するために結果を連結する必要があります-GROUP_CONCAT()関数を使用します。

于 2012-06-28T11:06:07.403 に答える
0

コメントですでに述べたように、GROUP_CONCAT()を使用する必要があります。ここにいくつかの例とオプションがあります-http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

于 2012-06-28T11:07:20.267 に答える
0
SELECT table1.*, 
       table2.tagidgroup 
FROM   table1 
       INNER JOIN (SELECT id, 
                          Group_concat(tagid SEPARATOR ','  ) AS tagidgroup 
                   FROM   table2 
                   GROUP  BY id) Table2 
               ON table1.id = Table2.id 
于 2012-06-28T11:09:36.443 に答える