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」条件を実装します。あなたが持っているものを殺しているのは、「OR」がすべてのタイトルに適用されることだと思うので、すべてのエントリに対してそれを数え、それ自体のタイトルマッチからすでに得ていたものと同じプラスを得る.

あなたが本当に意味していると思うのは、これをフィルター(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 don't care」のエントリは完全に無視されます。これは、取得しようとしているコンテキストにとって意味がありますか?

于 2013-06-24T13:49:38.350 に答える