MySQL:如果任何行有值,请检查整个列

时间:2013-04-04 18:08:41

标签: php mysql

如果audio列的所有行都为空,我想要有条件地切换。我尝试使用GROUP BY类型但不起作用。

  SELECT postid, title, has_audio, audio, type 
  FROM qa_posts 
  WHERE parentid=1

enter image description here

因此,如果存在整个列的音频,那么执行代码A的父ID(如果不是代码B

3 个答案:

答案 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 NULL1即可。 “至少”的东西允许我们对查询应用一些约束,因为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 <> ''