0

私は大きな問題を抱えており、ウェブで読んで解決策を見つけたかもしれませんが、その論理は理解するのが難しすぎると思います:)

私のmysqlデータベースにテーブルがあり、ここにあります:

CREATE TABLE eventi (
id INT(12) NOT NULL AUTO_INCREMENT,
autore VARCHAR(100) NOT NULL,
tipo VARCHAR(50) NOT NULL,
titolo VARCHAR(50) NOT NULL,
contenuto VARCHAR(2000) NOT NULL,
data_evento VARCHAR(30) NOT NULL,
fine_evento VARCHAR(30) NOT NULL,
data_finale VARCHAR(40) NOT NULL,
ora_evento VARCHAR(8) NOT NULL,
ora_fevento VARCHAR(8) NOT NULL,
img VARCHAR(255) NOT NULL,
accessi int(10) unsigned NOT NULL default '0',
pagato SET(  '0',  '1' ) NOT NULL default '0',
pacchetto SET(  '1',  '2', '3' ) DEFAULT NULL , -- Offerta 1=7gg, 2=14gg, 3=31gg
data DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (id)
);

わかりました、問題はこれです:

私はクライアントにイベントを販売し、彼らが「pacchetto」のタイプを使用する場合、彼らは多かれ少なかれ支払います。表から、1、2、または3に設定できる「pacchetto」(パケット)という列があることがわかります。最初の(1)を選択すると、日付の7日前にイベントが表示されます( 「data_finale」です-英語:last_date); 2番目(2)、14日、および3番目(3)、31日を選択した場合。私にはたくさんのクライアントがいますが、クライアントがパケット1を選択してイベントがオンラインになり、別のクライアントがパケット3を選択してイベントがオンラインになっている場合は、両方のクライアントの両方のイベントを表示する必要があります。私はそれが「難しい」と思いますが、私はこれを行いましたが、実行されていないようです。正しいイベントが1つだけ表示されます:pastebin。com / RscmQJ7L助けてくれてありがとう!

4

2 に答える 2

2

SQL クエリを書き直すことをお勧めします。すべてを 1 つのクエリで実行できるため、パフォーマンスが大幅に向上します。次のように条件を OR で連結するだけです。

... WHERE (pacchetto = '1' AND (data_finale >= NOW() AND data_finale <= (NOW() + INTERVAL 7 DAY)) OR
pacchetto = '2' AND (data_finale >= NOW() AND data_finale <= (NOW() + INTERVAL 14 DAY)) OR
pacchetto = '3' AND (data_finale >= NOW() AND data_finale <= (NOW() + INTERVAL 31 DAY))

テストされていませんが、アイデアを得る必要があります。

于 2013-03-15T16:32:50.103 に答える
0

mysql_fetch 内で mysql_query を実行すると、同様の問題が発生しました。避けるのが一番。1 つの SQL ステートメント内で実行するか、クエリを配列に戻してから配列をトラバースします。また、mysql_query は避けるのが最善です。mysqli または PDO を使用する必要があります。

于 2013-03-15T16:35:04.190 に答える