1

私はかなりうまく動作するデータ駆動型バナー システムを持っています。

それは2つのテーブルから離れています

banner_frames これには、すべてのバナー フレームの個々の行が含まれ、画像、テキスト、およびフレーム レイアウト情報が含まれます。

banner_frameset これには、カンマ区切りの値としてクエリに取り込む banner_frames 行のグループ化情報が含まれます。

$bannerpageidページに設定されている場合、このクエリを実行するphp変数があります。

mysql_select_db($database_banners, $banners);
$query_banner_frameset = "SELECT banner_frameset.*, banner_frames.* 
FROM banner_frameset, banner_frames 
WHERE banner_frameset.bp_ID = $bannerpageid 
AND FIND_IN_SET(banner_frames.bf_ID, banner_frameset.bp_frames) 
AND banner_frames.bf_live = 1 
ORDER BY FIND_IN_SET(banner_frames.bf_ID, banner_frameset.bp_frames)";
$banner_frameset = mysql_query($query_banner_frameset, $banners) or die(mysql_error());
$row_banner_frameset = mysql_fetch_assoc($banner_frameset);
$totalRows_banner_frameset = mysql_num_rows($banner_frameset);  

クエリを変更して、各フレーム行のオプションの開始日および/または有効期限を含めて、現在の日付/時刻がバナー フレーム行に設定されたエントリよりも小さいか大きい場合に影響を受けるフレームのみを表示したいと考えています。

開始日と有効期限の banner_frame 列は次のとおりです bf_datestartbf_dateexpire

私が達成したいのは、banner_frames.bf_IDリストされているすべてbanner_frameset.bp_framesを取得し、開始日と有効期限のいずれかまたは両方が設定されているかどうかに応じて、バナー フレーム行を省略または取得することです。 start または expiry が NULL に設定されている

このクエリを実行する最も効率的な方法は何ですか。上記のクエリを変更できますか、または do/while ループの前に別の if ステートメントとして実行する必要がありますか?

これが理にかなっていることを願っています。

どうもありがとう

4

1 に答える 1

0

変数として開始日と終了日を含む where 句を追加しますが、開始日と終了日を、使用しているどの日付タイプでもmysql がサポートする最小/最大に初期化します。デフォルトでは、すべての日付が含まれるため、クエリは通常どおり実行されます。必要に応じて開始日と終了日の変数を変更します。

于 2013-10-03T13:09:44.803 に答える