添加OR语句时子查询继续加载

时间:2013-06-24 09:29:17

标签: mysql subquery

我想显示前15个使用的标题,以及相应数量的文章。在这一点上,它正在发挥作用。但是,现在我想添加另一个'OR语句',这是查询继续加载的地方(直到我手动终止它)。

工作查询:

SELECT
    title,
    title as t,
    (SELECT count(id) FROM articles WHERE title = t) as nr
FROM
    articles
GROUP BY
    title
ORDER BY
    nr DESC
LIMIT
    15

查询失败:

SELECT
    title,
    title as t,
    (SELECT count(id) FROM articles WHERE title = t OR title = 'Example title') as nr
FROM
    articles
GROUP BY
    title
ORDER BY
    nr DESC
LIMIT
    15

有人知道为什么这个查询失败了吗?

2 个答案:

答案 0 :(得分:0)

试试这个

SELECT
title,
title as jt,
(SELECT count(id) FROM articles WHERE (title = t OR title = 'Example title')) as nr
FROM
articles
GROUP BY
title
ORDER BY
nr DESC
LIMIT
15

答案 1 :(得分:0)

我认为自我加入比你每次为每一行执行的柱状(select count())调用做得更好。

SELECT
      A1.title,
      count( A2.ID ) as NR
   FROM
      articles A1
         JOIN articles A2
            on A1.title = A2.title
   GROUP BY
      A1.title
   ORDER BY
      NR DESC
   LIMIT
      15

现在,要实现“OR”条件。我认为杀死你所拥有的东西的是“OR”应用于所有游戏,因此你可以为每个条目计算它,并获得与它自己的标题匹配相同的PLUS。

我认为你真正的意思是你想要这个作为过滤器(WHERE标准)。您想要所有类似“示例标题”的文章,并且从这些文章中有多少文章与其“标题”内容相关联。如果是这种情况,只需添加到上面的查询...

WHERE
   A1.title = 'Example title'

示例...您的文章表格标题为

Example SQL
Example Query MySQL
Example Query SQL-Server
Example I dont care
Example Query Oracle
Example Query Oracle 11
Example Query SQL-Server 2008

因此,如果您正在寻找像“示例查询”这样的标题,那么您将获得MySQL,SQL-Server,Oracle,Oracle 11,SQL-Server 2008的条目,并完全忽略SQL和'I dont关心'。这对你想要得到的背景有意义吗?