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”,他们支付的费用或多或少。从表中可以看到有一个名为“pacchetto”(数据包)的列,可以设置为 1、2 或 3。如果他们选择第一个 (1),他们的事件将在日期前 7 天显示(即是“data_finale”——英文:last_date);如果他们选择第二 (2) 天,14 天,第三 (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 时,我遇到了类似的问题。最好避免。要么在一个 SQL 语句中执行,要么将查询带回一个数组,然后遍历该数组。此外,最好避免使用 mysql_query。哟应该使用mysqli或PDO。

于 2013-03-15T16:35:04.190 回答