3

我想在 MySql 语句中添加一个条件。如果这甚至可能?

这是我当前的 mysql 选择语句

SELECT *
      FROM `validproduct`
      WHERE `visible` = 1
      AND `typeid` = 2
      AND `sizeid` = 3
      GROUP BY `productid`

所以目前,我正在选择 sizeid = 3 的产品。我要做的是选择 size = 1 的产品,如果不存在,则选择 sizeid = 3。

我的 validproducts 表包含一个产品列表,其中包含最多 6 种不同尺寸的产品(它们又具有不同的定价)。我想退回所有具有最低 sizeid 的产品(该产品的价格也最低)。并非所有产品都有 sizeid 1。

所以我的返回数据将类似于产品 A (sizeid 1, $x); 产品 B (sizeid 3, $y) 等

4

2 回答 2

1

这是一种方法:

SELECT 
  vp1.* 
FROM 
  validproduct vp1 
INNER JOIN
  (
    SELECT 
      productid, MIN(sizeid) as minsize 
    FROM 
      validproduct 
    WHERE 
      visible = TRUE AND
      typeid = 2
    GROUP BY
    productid
  ) AS vp2
ON 
  vp1.productid = vp2.productid AND 
  vp1.sizeid = vp2.minsize AND 
  vp1.visible = TRUE AND
  vp1.typeid = 2
GROUP BY 
  vp1.productid;

解释:

外部查询实际上是您已经拥有的。内部子查询查找每个产品的最小 sizeid。通过加入这两者,你得到你想要的。

请看小提琴

于 2013-05-13T01:10:37.047 回答
0

这有点奇怪,但好吧,我想......

SELECT * FROM ints;
+---+
| i |
+---+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
+---+

SELECT COALESCE(i2.i,i1.i)m FROM ints i1 LEFT JOIN ints i2 ON i2.i = 3 WHERE i1.i = 1;
+------+
| m    |
+------+
|    3 |
+------+

SELECT COALESCE(i2.i,i1.i)m FROM ints i1 LEFT JOIN ints i2 ON i2.i = 11 WHERE i1.i = 1;
+------+
| m    |
+------+
|    1 |
+------+

或许...

SELECT i FROM ints ORDER BY FIELD(i,1,3) DESC LIMIT 1;
+---+
| i |
+---+
| 3 |
+---+
于 2013-05-13T00:06:13.397 回答