0

maineventsというテーブルとsubeventsというテーブルがあります。メインイベントごとに、subname='$sub_name'とeventidに一致する3つのサブイベントが必要です。メインイベントが多い場合、スクリプトが遅すぎます。ゆっくりドラッグして、ロードするのに10秒。サブイベントループを無効にすると、スクリプトがすぐに読み込まれます。私は、以下を書くためのより短い/より速い/より簡単な方法があるかもしれないと思います。たぶん、すべてを1つのクエリにまとめます。よくわかりません。

$a=sqlsrv_query($conn, "SELECT
    eventid,status,name, CONVERT(varchar(100),date,107) AS dt 
    FROM dbo.mainevents WHERE 
    ( date >= '$start_date' AND date <= '$stop_date' ) AND disabled='0'
    ORDER BY category asc");
while($e=sqlsrv_fetch_array($a)){
    $b=sqlsrv_query($conn, "SELECT 
        subid, subname FROM dbo.subevents WHERE
        eventid='$e[eventid]' AND subname='$sub_name' ORDER BY subname");
    while($s=sqlsrv_fetch_array($b)){
        //do stuff
    }
}
4

1 に答える 1

1

最初のクエリで 2 つのテーブルを結合しないのはなぜですか?

外部結合を挿入する必要がありますが、サブ イベントがない場合、またはメイン イベントを取得できません。

何をループする必要があるかは、SQL サーバーのオプティマイザに決定させます。

SQL は次のようになります。

SELECT m.eventid, m.status, m.name, CONVERT(varchar(100),date,107) AS m.dt, s.subid, s.subname 
FROM dbo.mainevents m, dbo.subevents s
WHERE m.eventId *= s.eventId
AND ( m.date >= '$start_date' AND m.date <= '$stop_date' ) 
AND m.disabled='0'
ORDER BY m.category asc, s.subname asc

これは T-SQL の外部結合の正しい構文だと思いますが、T-SQL の作業を行ってから長い時間が経ちました。:)

于 2013-03-16T10:35:52.253 に答える