我想在MySql语句中添加一个条件。如果可能的话?
这是我当前的mysql select语句
SELECT *
FROM `validproduct`
WHERE `visible` = 1
AND `typeid` = 2
AND `sizeid` = 3
GROUP BY `productid`
所以目前,我选择sizeid = 3的产品。我想做的是选择size = 1的产品,如果不存在,那么选择sizeid = 3.
我的有效产品表包含与其关联的最多6种不同尺寸的产品列表(反过来又有不同的定价)。我想要退回所有我的产品,使用最小的sizeid(也将是该产品的最低价格)。并非所有产品都具有sizeid 1。
所以我的返回数据就像产品A(sizeid 1,$ x);产品B(sizeid 3,$ y)等
答案 0 :(得分: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。通过加入这两个你得到你想要的。
答案 1 :(得分: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 |
+---+