无法在PHP中为MySQL查询添加条件

时间:2017-08-24 18:30:40

标签: php mysql

我是PHP和MySQL的新手,我在编写我想要发生的事情时遇到的问题是我的查询:

$query = "SELECT SUM(op.total) as amount_sum
 , SUM(r.recurring_price) as recurring_price
 , op.subscription 
 FROM " . DB_PREFIX . "order o 
 LEFT JOIN " . DB_PREFIX . "order_product op 
   ON(op.order_id=o.order_id)
 LEFT JOIN " . DB_PREFIX . "order_recurring r 
   ON(r.order_id=o.order_id)
 WHERE order_status_id IN(" . implode(",", $implode) . ") 
   AND o.date_added >= (CURDATE() - INTERVAL 12 MONTH)";

我想将这个条件添加到查询

AND op.subscription ='1'

如果op.subscription等于1,我只希望将其添加到查询中。 我使用它进行过滤,所以将它添加到主查询不起作用,但我不明白我如何添加它。我认为是if语句,但是我必须将op.subscription设置为变量吗?我知道我想要做什么,但我不知道如何在代码中正确编写

1 个答案:

答案 0 :(得分:0)

  

我想将这个条件添加到查询

在您已经拥有的查询结尾处连接它会得到您想要的结果。

值得注意的是,

  • 在WHERE子句中添加此谓词会将第一个LEFT JOIN转换为过于昂贵的INNER JOIN。使用明确的INNER JOIN会更有效率。

  • 您引用了一个整数值。如果表中的基础数据类型是数字,那么这也是无效的。尽管优化器应该能够以可忽略的开销处理这种情况,但如果盲目忽略数据类型,则会遇到问题。 OTOH如果属性的数据类型是varchar,那么它表明您使用了错误的数据类型。

  • 如果要对表或属性名使用SQL保留字(如order),那么将它们放在反引号中是个好主意,这样SQL解析器就知道它们不是指令而是名称。