0

现在我应该简要解释一下我想做什么。

我在每个容器中有一个“容器”(传输)表和另一个“项目”(文档)表。

我想输出一个表格,列出所有容器,每行末尾有一列,其中包含容器中项目的逗号空格列表。目的是实现对每个容器中项目的简单搜索(使用数据表插件)。

我当然可以查询我的容器表,并且在“PHP while 循环”期间,我可以辅助查询项目表中匹配的容器 ID。然后我连接每一行的项目,但我想避免多个 SQL 调用。

所以我创建了一个右连接(我在下面写了一个简化版本)......

SELECT transmittal.*, transmittal_documents.*
FROM transmittal RIGHT JOIN
     transmittal_documents
     ON transmittal_documents.transmittal_id = transmittal.transmittal_id

编写我的 PHP while 循环以仅收集表中唯一的“容器”值,同时使用 PHP 连接之类的东西连接“项目”的最佳方法是什么。

或者,也许我可以在使用 PHP 处理之前在 SQL 中执行此操作?

提前感谢你的帮助。

4

2 回答 2

1

最好的方法是在 SQL 中使用group_concat

SELECT t.*, group_concat(td.item) as items
FROM transmittal t LEFT JOIN
     transmittal_documents td
     ON td.transmittal_id = t.transmittal_id
GROUP BY td.transmittal_id;

我认为你的意思是left join而不是right join。将left join保留表中的所有内容transmittal以及其他表中的所有匹配项。

于 2014-01-14T13:00:30.197 回答
0

感谢 Gordon Linoff 的上述回答,我设法让它为我工作......

选择吨。, 时差。, group_concat(td.item) 作为项目从传输 t 左连接传输文件 td ON td.transmittal_id = t.transmittal_id GROUP BY t.transmittal_id

我不确定为什么我需要额外的 GROUP BY 但它确实有效。没有它,我只收到一行数据。

实际上,我必须在我的附加表中加入文档信息,但如果“td.item”值是一个字符串(它是我在这里的表中的一个 INT,导致创建一个 BLOB,这将不是问题)没有包含正确的信息)。

看来 GROUP_CONCAT 字段可能有一个限制,而不使用其他参数设置,所以我可能会更好地使用 PHP 中的数组来处理这个问题。

于 2014-01-14T14:53:51.170 回答