2017-08-24 53 views
0

进出口新的PHP和MySQL,我有写问题,我想在这里发生的是我的查询:无法添加条件,MySQL查询在PHP

$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)"; 

我想这个conditon添加到查询

AND op.subscription ='1' 

我只想要这个,如果op.subscription使用这种过滤,因此增加了主查询不起作用等于1 林被添加到查询,但我不明白我怎么可以添加上。我认为是if语句,但是我必须将op.subscription设置为变量吗?我知道我希望能够做的,但我不明白如何将其正确地写在代码

+0

我说这一点,它返回我想要的结果,但它抛出一个警告,以及如果($查询[ 'filter_subscription'] == '1'){ \t \t \t \t \t $查询=“ AND op.subscription ='1'“; \t \t} –

+0

在上面的代码中,$ query是一个字符串,但在您的评论中,您将它视为一个数组。我现在很困惑。 – symcbean

+0

@symcbean'$ implode'是一个完整的未知数,如果你认为数据是无害的,那么你就犯了一个巨大的错误。 PDO不支持绑定到数组,这是真的,但在必要数量的占位符中加入并不难。我也说“*任何*用户数据”,因为它极有可能是“$ implode”包含某种可能来自下拉选择的标识符,例如,原产地为'$ _GET'或'$ _POST'。 – tadman

回答

0

我想这个conditon添加到查询

相连来在查询结束你已经有了会给你想要的结果。

值得注意虽然,

  • 该WHERE子句中添加该谓词,将第一左连接成过于昂贵INNER JOIN。使用明确的INNER JOIN将会更高效。

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

  • 如果您要为表或属性名称使用SQL保留字(如order),那么最好将它们放在反引号中,以便SQL解析器知道它们不是指令名称。