0

2 秒で実行されるクエリに問題があります。サブクエリは 600 行を返すため、IN 演算子を使用しないクエリまたはより高速なクエリが必要です。

現在、私はこのクエリを持っています:

SELECT tag.idtag, tag, COUNT(*) AS nombre
FROM tag, questtag
WHERE tag.idtag = questtag.idtag
  AND idquestion IN (
      SELECT question.idquestion
      FROM question, questtag
      WHERE question.idquestion = questtag.idquestion AND idtag IN (1)
      GROUP BY question.idquestion
      HAVING COUNT(*) = 1
  )
GROUP BY tag
ORDER BY nombre DESC, tag
LIMIT 0, 24

私はSQLに言いたい:「スタックオーバーフローのようなJavascriptタグ(交差制約)に関連する他のタグを取得してください。」

質問、クエストタグ、タグの 3 つのテーブルがあります。質問とタグは questtag テーブルで関連付けられています。

SQL スキーマ:


QUESTION (idquestion、質問) :

1、「JavascriptとJquery」

2、「HTML、CSS、Javascript」

....


QUESTTAG (#idquestion, #idtag) :

1、1

1、2

2、3

2、4

2、1

....


QUESTTAG (#idtag、タグ) :

1、ジャバスクリプト

2、Jクエリ

3、HTML

4、CSS

....


Javascriptでは、 Jquery、HTML、CSSを取得する必要があります。Javascript、HTML ではCSSを取得する必要があります。

4

1 に答える 1

2

次のようにクエリを構成すると、うまくいく可能性があります。

SELECT tag.idtag, tag, COUNT(*) AS nombre
FROM tag join questtag on tag.idtag = questtag.idtag
join (
      SELECT question.idquestion, COUNT(*) tags
      FROM question q2 join questtag qt2 on q2.idquestion = qt2.idquestion 
      AND idtag IN (1)
      GROUP BY question.idquestion
  )  temp on temp.idquestion = questtag.idquestion
WHERE tags = 1
GROUP BY tag.idtag, tag
ORDER BY nombre DESC, tag
LIMIT 0, 24

そうでないかもしれません。いずれにせよ、一見の価値があります。

于 2013-06-02T12:33:45.827 に答える