首页 > 解决方案 > 在 php - mysql 中嵌套“group by”和“for (each)”语句

问题描述

我有一个由许多表组成的数据库。第一个表是关于“文本”的,带有一些属性。另一个表格是关于传达这些文本的“手稿”(每个文本可以由多个手稿传达)。这两个表由“传送”表链接。

当我进行 mysql 查询时,我按 textID 对文本进行分组。但是,我想打印所有传达相同文本的手稿。我想我应该写一些类似“对于每个文本ID,显示所有手稿ID”的东西,但我不知道如何正确编写代码。

我在这一点上:

FROM text tx, place pl, print pr, manuscript ms, conveys cv
WHERE conditions
GROUP BY txId

(它工作正常。但问题如下)

while ($row = mysqli_fetch_array($result)) {
    if($row['txId']!=0)
    for($i=0; $i.'<'.$row['msId'].'.lenght'; $i++) {echo ($row['msId']) . "<br>";}

此代码打印出第一个 msId 的次数与我在数据库中拥有的 msId 的总数一样多!

标签: phpmysql

解决方案


在这种情况下,您需要使用Aggregate (GROUP BY) Function,如下所示:

SELECT
  <...other selects...>
  GROUP_CONCAT(DISTINCT ms.msId ORDER BY ms.msId ASC SEPARATOR ', ') as msIds
FROM text tx, place pl, print pr, manuscript ms, conveys cv
WHERE <...conditions...>
GROUP BY tx.txId

推荐阅读