0

私は MySQL と PHP を使用しており、次のデータベース リクエストがあります。

$result1 = mysql_query("SELECT nummer FROM abo WHERE usr = '{$usr}'");

while($row = mysql_fetch_object($result1))
{
  $sendung=$row->sendung;
  $result2 = mysql_query("SELECT *
                            FROM filme 
                           WHERE sendung = '{$sendung}' 
                        ORDER BY datum DESC LIMIT 0,1;");

  while($row = mysql_fetch_object($result2))
  {
    [...]
  }
}

たとえば、2 番目の while が 20 回呼び出されます -> 20 のデータベース リクエストがあります。しかし、このリクエストを接続したり、このリクエストを最適化したりできますか?

1 つのアプローチ:

$arraysendung = array();

$result1 = mysql_query("SELECT nummer FROM abo WHERE usr = '{$usr}'");

while($row = mysql_fetch_object($result1))
{
  array_push($arraysendung,$row->sendung);
}

しかし、1回のリクエストでどのように使用できます$arraysendungか(可能ですか)?

4

2 に答える 2

2

結合を使用する

SELECT nummer, filme.*
FROM abo
JOIN filme ON filme.sendung = abo.nummer
ORDER BY datum desc

LIMIT が整っていないため、これは 100% の代替品ではありませんが、始めるには十分なはずです。

ほとんどの場合、2 つ以上のクエリを実行していて、後のクエリが以前のクエリの結果に基づいている場合は、ほとんどの場合、それらを 1 つの JOINed クエリに書き直すことができます。

于 2013-02-15T15:06:48.663 に答える
1

クエリ:

SELECT filme.*
FROM filme JOIN 
    (SELECT sendung, max(datum) as datum FROM filme GROUP BY sendung) as md 
    ON filme.sendung = md.sendung AND md.datum = filme.datum
WHERE filme.sendung IN (SELECT nummer FROM abo WHERE  usr = '{$usr}')

「sendung,datum」が一意であれば、「LIMIT 1 part」を含む同様の結果が得られるはずです。

参照:サブクエリ、および JOIN

于 2013-02-15T15:25:43.853 に答える