如何解决寻求正确的MySql“ IF”方法的指南 表结构所需结果有效但“肮脏”的解决方案
我需要获取特定列值上的数据,但还需要包含已启用IF
并且inventory
大于0的项目stock
。
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,price
FROM shop
WHERE published = 1
AND price > 2
AND inventory = 0
ORDER BY RAND()
LIMIT 30
获取已启用库存且有库存的物品
SELECT id,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);
解决方法
样本数据和预期结果将有助于澄清。我认为您需要将列选择和/或它们括起来
SELECT id,name,image,price
FROM shop
WHERE (published = 1 AND price > 2) OR
(inventory = 1 AND stock > 0)
ORDER BY RAND()
LIMIT 30
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。