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