1

我想显示前 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

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

4

2 回答 2

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”应用于所有标题,所以你计算每个条目并获得相同的 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 和“我不在乎”的条目。这对您要获得的上下文有意义吗?

于 2013-06-24T13:49:38.350 回答
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
于 2013-06-24T09:34:43.440 回答