【发布时间】:2021-01-14 19:54:15
【问题描述】:
我需要获取特定列值的数据,但还包括项目IF 他们启用了inventory 并且stock 大于0。
以下只是一个概念查询,可以直观地了解我的意图。当然不行。
SELECT id, name, image, price
FROM shop
WHERE published = 1
AND price > 2
/*concept clause here*/
IF(inventory = 1 AND stock > 0, include, ignore)
/*end concept*/
ORDER BY RAND()
LIMIT 30
表结构
shop
__________________________________________
|id|name |image |price|inventory|stock|
------------------------------------------
|4 |widget|pic.jpg |6 |1 |12 |
------------------------------------------
|5 |bolt |bolt.jpg|7 |0 |0 |
------------------------------------------
|6 |trowel|trow.jpg|12 |1 |0 |
__________________________________________
想要的结果
数组
[
['id'=>4,'name'=>'widget','image'=>'pic.jpg','price'=>6],
['id'=>5,'name'=>'bolt','image'=>'bolt.jpg','price'=>7]
]
启用inventory 但stock 值为0 的行将不在数组中。
如何根据这种情况取得成果?
有效但“肮脏”的解决方案
我已经运行了两次类似的查询,然后合并数组
获取未启用库存的商品
SELECT id, name, image, price
FROM shop
WHERE published = 1
AND price > 2
AND inventory = 0
ORDER BY RAND()
LIMIT 30
获取已启用库存且有库存的商品
SELECT id, name, image, price
FROM shop
WHERE published = 1
AND price > 2
AND inventory = 1
AND stock > 0
ORDER BY RAND()
LIMIT 30
合并数组
$merged = array_merge($withoutInventory, $withInventory);
【问题讨论】:
标签: mysql conditional-statements