Php 按价格筛选产品

Php 按价格筛选产品,php,sql,filter,Php,Sql,Filter,我试图按价格筛选产品,但遇到了特价问题。 如果特殊价格适用于产品,则以下查询将显示随机结果 "SELECT * FROM tablename WHERE ((price >= ".(int)$min_price." AND price <= ".(int)$max_price." AND ('".date('Y-m-d')."' NOT BETWEEN special_price_startdate AND special_price_enddate OR special_price

我试图按价格筛选产品,但遇到了特价问题。
如果特殊价格适用于产品,则以下查询将显示随机结果

"SELECT * FROM tablename WHERE ((price >= ".(int)$min_price." AND price <= ".(int)$max_price." AND ('".date('Y-m-d')."' NOT BETWEEN special_price_startdate AND special_price_enddate OR special_price_startdate = NULL OR special_price_enddate= NULL)) OR (('".date('Y-m-d')."' BETWEEN special_price_startdate AND special_price_enddate AND special_price_startdate IS NOT NULL AND special_price_enddate IS NOT NULL) AND special_price >= ".(int)$min_price." AND special_price <= ".(int)$max_price.")) AND isactive = 1 AND isdeleted = 0 ORDER BY created DESC, productid DESC LIMIT ".(($page-1)*$perpage).",".$perpage;

“从表名中选择*,其中((price>=”(int)$min\u price.”和price=“(int)$min\u price.”。“和special_price查询完全按照其语法执行它应该执行的操作:如果special price适用且special price在设置的限制之间,则返回该行。否则,如果special price不适用且常规price在设置的限制之间,则返回该行:

CREATE TABLE `tablename` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `price` int(11) DEFAULT NULL,
  `special_price_startdate` date DEFAULT NULL,
  `special_price_enddate` date DEFAULT NULL,
  `isactive` bit(1) DEFAULT NULL,
  `isdeleted` bit(1) DEFAULT NULL,
  `special_price` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
针对PHP输入调整的查询:

SELECT *
  FROM tablename
 WHERE     (   (    price >= 99
                AND price <= 999
                AND (   '2017-04-21' NOT BETWEEN special_price_startdate
                                             AND special_price_enddate
                     OR special_price_startdate = NULL
                     OR special_price_enddate = NULL))
            OR (    (    '2017-04-21' BETWEEN special_price_startdate
                                          AND special_price_enddate
                     AND special_price_startdate IS NOT NULL
                     AND special_price_enddate IS NOT NULL)
                AND special_price >= 99
                AND special_price <= 999))
       AND isactive = 1
       AND isdeleted = 0
/*ORDER BY created DESC, productid DESC*/
 LIMIT 10;
输出:

1   120 4/20/2017 12:00:00 AM   4/22/2017 12:00:00 AM   1   0   125
2   125 4/27/2017 12:00:00 AM   4/28/2017 12:00:00 AM   1   0   125

如果你能告诉我们你期望的结果和你实际得到的结果,这将使帮助变得更容易!
1   120 4/20/2017 12:00:00 AM   4/22/2017 12:00:00 AM   1   0   125
2   125 4/27/2017 12:00:00 AM   4/28/2017 12:00:00 AM   1   0   125