3

可能であれば、2 つのクエリを 1 つに最適化することを検討しています。

私の最初のクエリは、歌詞のすべての作者を検索します...次に、見つかった各作者について、作者が関与した歌詞の総数を見つけたいです...

現在、最初のクエリを実行しており、見つかった行ごとに別のクエリを起動して、作者が関与した合計歌詞を取得しています...したがって、4人の作者がいる場合、さらに4つのクエリを起動することになります...それは私の意見では多くの質問です。そのため、ここに書き込むことにしたので、クエリを最適化する方法について助けを得ることができます...

これは、歌詞を担当する著者を取得するために実行しているクエリです。

$sql = "SELECT author.author_id, author.name
    FROM track INNER JOIN lyrics_author ON track.lyrics_id = lyrics_author.lyrics_id
    INNER JOIN author ON lyrics_author.author_id = author.author_id
    WHERE track.track_id = $trackid ";

これは、作者が書いた歌詞の総数を取得するクエリです。

$total = "SELECT lyrics_author.author_id, count(*) as total
    FROM lyrics_author
    WHERE lyrics_author.author_id = $author_id
    GROUP BY lyrics_author.author_id";

これはコードのサンプルです:

<?php
$trackid = 5;

$sql = "SELECT author.author_id, author.name
    FROM track INNER JOIN lyrics_author ON track.lyrics_id = lyrics_author.lyrics_id
    INNER JOIN author ON lyrics_author.author_id = author.author_id
    WHERE track.track_id = $trackid ";

$result_author = @ $conn->query($sql);

while ($row_author = $result_author->fetch_assoc()) {
    $author_id = $row_author['author_id'];

    $total = "SELECT lyrics_author.author_id, count(*) as total
        FROM lyrics_author
        WHERE lyrics_author.author_id = $author_id
        GROUP BY lyrics_author.author_id";

    $result_total_lyrics = @ $conn->query($total);
    $t = $result_total_lyrics->fetch_assoc();

    echo $t['total'];

    $result_total_lyrics->free();
}

$result_author->free();
?>

このクエリを最適化することは可能ですか? はいの場合、どのように?あなたが参照できるリンクがあるので、私は学ぶことができます...

ありがとうマルコ

4

2 に答える 2

1

それは一体として混乱しています。Lyricsid というプロパティがあるのに、なぜ trackid を Lyricsid として渡すのですか?? ともかく

Select author.author_id, author.name, Count(*)
inner join
(SELECT lyrics_author.author_id 
FROM lyrics_author 
INNER JOIN tracks ON track.lyrics_id = lyrics_author.lyrics_id 
WHERE track.track_id = $lyricsid"; 
)  as lyricalauthors
inner join lyrics_author on lyrics_author.author_id = lyricalauthors.author_id
On author.author_id = lyricalauthors.author_id
Group By Author.author_id,author.name

おもう ...

于 2012-06-30T19:33:13.007 に答える
1
SELECT
  author.author_id,
  author.name,
  COUNT(DISTINCT more_tracks.lyrics_id) AS total
FROM track
INNER JOIN lyrics_author USING (lyrics_id)
INNER JOIN author USING (author_id)
LEFT JOIN lyrics_author AS more_tracks USING (author_id)
WHERE track.track_id = $trackid
GROUP BY author.author_id
于 2012-06-30T19:17:45.290 に答える