微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

寻求正确的MySql“ IF”方法的指南 表结构所需结果有效但“肮脏”的解决方案

如何解决寻求正确的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]
]

启用了inventorystock值为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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?