0 レビュー
1 回答
phpで「groupby」および「for(each)」ステートメントをネストする--mysql
多くのテーブルで構成されるデータベースがあります。最初の表は、いくつかの属性を持つ「テキスト」に関するものです。別の表は、それらのテキストを伝える「原稿」に関するものです(各テキストは複数の原稿で伝えることができます)。 2つのテーブルは「伝達」テーブルによってリンクされています。
mysqlクエリを実行するとき、テキストをtextIDでグループ化します。しかし、それでは、同じテキストを伝えるすべての原稿を印刷したいと思います。 「textIDごとに、すべてのmanuscriptIDを表示する」のようなものを書くべきだと思いますが、コードを正しく書く方法がわかりません。
私はこの時点です:
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を出力します!
わからない
0
レビュー
答え :
解決策:
この場合、次のような集計(GROUP BY)関数を使用する必要があります:
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
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。