如果audio
列的所有行都为空,我想要有条件地切换。我尝试使用GROUP BY类型但不起作用。
SELECT postid, title, has_audio, audio, type
FROM qa_posts
WHERE parentid=1
因此,如果存在整个列的音频,那么执行代码A的父ID(如果不是代码B
)答案 0 :(得分:6)
您可以count
audio
不是NULL
的所有行are all rows' audio column empty?
。但是如果你的表更大并且包含大量的行等,那么这种方法的真正问题在于这样的查询对于DB来说可能是昂贵的并且至少比它可能慢。当然,过早优化是坏事,但事实并非如此 - 我们将优化方法,而不是代码:)
如果音频列
的所有行都为空,则需要有条件地切换
首先,将问题how many of rows are not null
视为正确的问题会很好。和不。它不是:)事实上你既不需要知道are all rows' audio column empty?
也不需要if there's any row that is NOT null?
,因为如果有5,10或100000,那么完全与你的条件无关。你应该做的是“翻转”问题并寻找问题的答案,如if there's any row that is NOT null?
。即使这两个问题在第一眼看起来都很相似,我们正在使用数据库来获得答案,所以这实际上是整个游戏改变者。
根据逻辑,要回答audio
问题,只需找出至少一个行NOT NULL
为1
即可。 “至少”的东西允许我们对查询应用一些约束,因为LIMIT 1
很好地满足“至少一个”条件,我们将使用SQL audio
,这会使DB停止并返回结果为一旦找到匹配查询的第一条记录,就不需要通过整个表格。这应该更快,资源更少。
执行后,我们的查询可以返回两个结果。要么我们什么都得不到(返回零行),这意味着所有NULL
都是if there's any row that is NOT null?
,或者相反,我们得到的东西(单行,无论哪一行)都意味着答案到{{1}}问题是'是,它是'(因为至少返回的是)。
答案 1 :(得分:2)
为select count(*)
执行WHERE audio != null
的select语句。然后根据您收到的号码做一个条件语句。确保将音频编入索引。
答案 2 :(得分:1)
您可以简单地检查NOT NULL
行,例如
SELECT * FROM `table` WHERE column IS NOT NULL AND column <> ''