用WHERE中的IF语句查询Mysql?

时间:2015-03-06 20:33:43

标签: mysql

我正在努力解决这个问题,但我找不到合适的解决方案......我想做什么?

现在我用最便宜的版本加入主要产品。但我需要编辑我的查询来执行此操作: 每个变体都有quantity_in_stock。如果所有变体都具有 quantity_in_stock == 0 ,请选择最便宜的变体,如果有任何变体 quantity_in_stock> 0 ,选择最便宜的 quantity_in_stock> 0

以下是代码示例,我需要使用它:

$query = 'LEFT JOIN (
                     SELECT id_product_variant, price AS price, main_product_id FROM ' . $this->products_v_table . ' 
                           ORDER BY price ASC
                     ) as t1 ON t1.main_product_id = ' . $this->table_name . '.id_product ';

你有什么想法,怎么做?感谢您的帖子:)

1 个答案:

答案 0 :(得分:1)

您应该从子查询开始,该子查询将为您提供为每个main_product_id指定的最低价格。这样就可以使用COALESCE()从参数列表中获取第一个非NULL项。

COALESCE()的第一个参数是MIN(IF(quantity_in_stock>0,price,NULL))。如果没有具有相应正数量值的价格值,这将返回空值。

第二个参数是MIN(IF(quantity_in_stock=0,price,NULL))这个参数给出零数量的最小价格。

         SELECT COALESCE(
                    MIN(IF(quantity_in_stock>0, price, NULL)),
                    MIN(IF(quantity_in_stock=0, price, NULL))
                ) price,
                main_product_id
           FROM mytable
          GROUP BY main_product_id

首先对此子查询进行故障排除是明智的,以确保它提供适当的结果,每个main_product_id一行。

然后,您需要使用此聚合结果集从主表中选择适当的详细记录 - 与最低价格对应的详细记录。这是这样的。

SELECT mytable.*
  FROM mytable
  JOIN (
             SELECT COALESCE(
                      MIN(IF(quantity_in_stock>0, price, NULL)),
                      MIN(IF(quantity_in_stock=0, price, NULL))
                    ) price,
                    main_product_id
               FROM mytable
              GROUP BY main_product_id
       ) m USING(main_product_id,price)

修改 ...我猜你mytable的名字。无法从您的问题中告诉表格的实际名称。您获得的错误意味着它所说的内容:您的一个表或子查询需要一个名为main_product_id但没有它的列。我建议你在将它传递给MySQL之前回显或转储$ query的值,然后从那里进行分析。