连接两个表,其中一个表具有多个匹配的行

时间:2013-08-10 05:32:37

标签: php mysql database join

试图找出是否可以创建一个连接表的查询,表一小于表二,表二有多个引用匹配表一个条目,查询将输出一个表,其中一个表保留一个表但你只需添加更多列。不确定这是否有意义所以这里是我所追求的一个例子

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。

UPDATE !!

保持原始查询并使用PHP操作结果也获得了良好的性能。如果您需要我发布我的代码,请告诉我。

2 个答案:

答案 0 :(得分: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

<强> Sample fiddle

答案 1 :(得分:0)

我将冒险投票,并说答案是否定的。仅仅是因为列数未知(例如,如果你在顶部单词中再添加一个句子,你可能会在结果集中再添加一列)并且每列都没有很好地定义(为什么blahblah4应该在列句而不是句子2中?)

IMO,SQL用于表示您想要获得的内容,但在这种情况下,SQL无法确切地说出您想要的内容。

即使可以这样做(我很乐意学习),我相信复杂性会抵消任何好处,在PHP中处理这个是一个更好的选择。