5

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

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

在此处输入图像描述

因此,如果该父 id 的整个列存在音频,则执行代码 A 如果不是代码 B

4

3 回答 3

6

你可以只是count所有的行audio不是NULL。但是,如果您的表更大并且包含大量行等,那么这种方法的真正问题是这种查询对于 DB 来说可能很昂贵,并且至少比它可能要慢。当然,过早的优化是坏事,但事实并非如此——我们将优化方法,而不是代码 :)

如果音频列的所有行都为空,想要有条件地切换

首先,最好认为这个问题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,这将使数据库停止并在找到与查询匹配的第一条记录后立即返回结果,无需通过整张桌子。这应该更快,资源消耗更少。

一旦执行,我们的查询可以返回两个结果。要么我们什么都没有(返回零行),这意味着所有audio' 都是NULL,或者相反,我们得到一些东西(单行,不管哪一个),这意味着问题的答案if there's any row that is NOT null?是'是的,它是'(因为至少返回的是)。

于 2013-04-04T18:12:04.427 回答
2

select count(*)使用for执行 select 语句WHERE audio != null。然后根据收到的数字做一个条件语句。确保音频已编入索引。

于 2013-04-04T18:12:14.667 回答
2

您可以简单地检查NOT NULL行,例如

SELECT * FROM `table` WHERE column IS NOT NULL AND column <> ''
于 2013-04-04T18:21:38.603 回答