1

テーブルを結合するクエリを作成できるかどうかを調べようとすると、テーブル 1 はテーブル 2 よりも小さく、テーブル 2 にはテーブル 1 のエントリに一致する複数の参照があります。クエリは、テーブル 1 の長さが保持される結合を出力しますが、さらに列を追加します。それが理にかなっているのかどうかわからないので、ここに私が求めているものの例があります

Table One                                  Table two
+-----------------------------+           +-----------------------------+
| id | english  |  definition |           | id | word_id  |  sentence   |
+-----------------------------+           +-----------------------------+
|1   |    A1    |    blah     |           |1   |    1    |   blahblah1  |
|2   |    B4    |    blah2    |           |2   |    1    |   blahblah2  |
+-----------------------------+           |3   |    1    |   blahblah3  |
                                          |4   |    2    |   blahblah4  |
                                          |5   |    2    |   blahblah5  |
                                          +-----------------------------+

********* クエリは ***************** のようなものを返す必要があります

+----------------------------------------------------------------+
| id | english  |  definition | sentence | sentence2 | sentence3 | 
+----------------------------------------------------------------+
|1   |    A1    |    blah     | blahblah1|  blahblah2| blahblah3 |
|2   |    B4    |    blah2    | blahblah4|  blahblah5|           |
+----------------------------------------------------------------+

現在のクエリは次のようになり、結果は次のようになります。

$query = "SELECT * FROM T1 INNER JOIN T2 ON T1.id = T2.word_id";

その結果:

+----------------------------------------+
| id | english  |  definition | sentence |
+----------------------------------------+
|1   |    A1    |    blah     | blahblah1|
|1   |    A1    |    blah     | blahblah2|
|1   |    A1    |    blah     | blahblah3| 
|2   |    B4    |    blah2    | blahblah4|
|2   |    B4    |    blah2    | blahblah5|
+----------------------------------------+

私はPHPとMySqlを扱っています。

アップデート!!

元のクエリにとどまり、PHPで結果を操作すると、パフォーマンスも向上します。私のコードを投稿する必要がある場合はお知らせください。

4

2 に答える 2

2

GROUP_CONCAT()を探しているかもしれません

SELECT T1.id, T1.english,T1.definition,
GROUP_CONCAT(T2.sentence ORDER BY T2.ID SEPARATOR '|') 
FROM Table1 T1 INNER JOIN Table2 T2 ON T1.id = T2.word_id
Group by word_id

サンプルフィドル

于 2013-08-10T05:46:59.340 に答える
0

私は反対票を投じるリスクを負い、答えはノーだと言います。単純に、列の数が不明であり (たとえば、最上位の単語にもう 1 つの文を追加すると、結果セットにもう 1 つの列を追加する可能性があります)、各列が適切に定義されていないためです (なぜ blahblah4 は、文 2 ではなく文の列にある必要があるか?)

IMO、SQLは取得したいものを伝えるために使用されますが、この場合、SQLは必要なものを正確に伝えることができません.

これができたとしても(私は学びたいです)、複雑さが利点を相殺し、PHPでこれを処理する方が良いオプションだと思います。

于 2013-08-10T05:55:44.277 に答える