私は2つのテーブル:activity
とtag
を持っています。 1つのactivity
には多くのものがあります。tags
現在の設定を最適化して、テーブル内のすべてのアクティビティを見つけて、すべてのタグを見つけるために各アクティビティを繰り返し実行する必要があります。最後に、コンテンツをJSONとして処理します。だから、私たちの最終的なコードは、そのような何かに見える1対多の結果に1つのクエリを設定する
-- Query that we execute one time
SELECT `id`, `name`
FROM `activity`
-- Query that we execute N times
SELECT `id`, `name`, `color`
FROM `tag`
WHERE `tag`.`activityId` = $activityId
:ここ
は一例であり$result = mysqli_query("
SELECT `id`, `name`
FROM `activity`
");
$data = array();
for ($i=0; $i<mysqli_num_rows($result); $i++) {
$row = mysqli_fetch_assoc($result);
$data[$i]["activityId"] = $row["id"];
$data[$i]["name"] = $row["name"];
$data[$i]["tags"] = array();
$activityId = $row["id"];
$resultTags = mysqli_query("
SELECT `id`, `name`, `color`
FROM `tag`
WHERE `tag`.`activityId` = $activityId
");
for ($j=0; $j<mysqli_num_rows($resultTags); $j++) {
$row = mysqli_fetch_assoc($resultTags);
$data[$i]["tags"][$j]["name"] = $row["name"];
$data[$i]["tags"][$j]["color"] = $row["color"];
}
}
PS:これは私たちのクエリとテーブルが道より複雑で、擬似コードです、それは基本的に私たちの問題の本質です。
これは、内部クエリを使用すること、またはそれ以上に、結合だけで達成することは可能ですか?
5つのテーブルを作成する必要があるため、私たちはそれぞれのアクティビティに対して5つのクエリを実行してしまいます。
ありがとうございます。
ありがとう@Sherifしかし、私はいくつかの他のテーブルに参加しているので、私は 'activity.id'によってテーブルを'グループ化する '必要があることを忘れていました。この場合、動作しません。 –
なぜ、それは正確に動作しませんか? 'activity.id'がPKの場合、このユースケースには影響しません。 – Sherif
あなたがそれがうまくいかないと主張している疑わしい 'GROUP BY'節とスキーマを含めて、それを働かせる方法を教えてください。 – Sherif