如何过滤特殊产品订单的行? [复制]

Posted

技术标签:

【中文标题】如何过滤特殊产品订单的行? [复制]【英文标题】:How to filter rows with orders of special product? [duplicate] 【发布时间】:2019-05-02 08:41:43 【问题描述】:

customer表:

---+-------+------------+
id + name  + region     + 
---+-------+------------+

还有orders表:

---+--------------+------------+----------+----------------+
id + cusomer_id   + product    +  price   +  amount_total  +
---+--------------+------------+----------+----------------+

如果我想形成一个每个客户都购买过的产品列表,用“;”表示,我提出一个要求:

            SELECT GROUP_CONCAT(orders.product separator ';') 
            FROM orders
            WHERE orders.customer_id = customer.id

一切正常,但是如果我想添加一些过滤器,则会出现错误:

SELECT customers.id, 
      (SELECT GROUP_CONCAT(orders.product separator ';') 
       FROM orders
       WHERE orders.customer_id = customers.id) as products 
FROM  customers        
WHERE customers.region like 'USA' 
      AND products not like '%fish%'


Query Error: Error: ER_BAD_FIELD_ERROR: Unknown column 'products' in 'where clause'

db-fiddle.com

【问题讨论】:

如果products 不是您的数据库列,则不能使用 只能在 mysqlHAVING 子句中使用别名。将AND products not like '%fish%' 更改为HAVING products not like '%fish%' 更正的 dbfiddle:db-fiddle.com/f/nBjpgHFVPWfJEbMjR2k9uF/22 @vppy 不用担心 - 如果我作为骗子关闭,我总是会尝试提供解决方案...... @Nick 谢谢!真正支持的方法。祝你在所有项目中好运。干杯! 【参考方案1】:

如果不是您的数据库列,您不能使用products,您需要这样做才能完成它

SELECT customers.id, 
      (SELECT GROUP_CONCAT(orders.product separator ';') 
       FROM orders
       WHERE orders.customer_id = customers.id) as products 
FROM  customers        
WHERE customers.region like 'USA' 
      AND (SELECT GROUP_CONCAT(orders.product separator ';') 
       FROM orders
       WHERE orders.customer_id = customers.id) not like '%fish%'

【讨论】:

成功了,谢谢支持。

以上是关于如何过滤特殊产品订单的行? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

同一视图中的 kohana 搜索过滤器

总和问题 - 不给出单独的行总和,显示每行的总和

Woocommerce如何获取最近订单的产品图片

如何将产品的订单金额汇总为一行

如何在 Laravel 中打印出包含多个产品的所有订单?

如何显示每个产品的总订单销售额和产品相关信息。数据库服务器 2014