0

私のテーブルは次のようになります。

tags: id, name, description
tag_relations: tag, item

item別のテーブルの ID をtag参照し、テーブルの ID を参照しtagsます。

だから私は最も使用されているタグを選択しようとしています:

SELECT t.*, COUNT(r.item) AS item_count
FROM tag_relations as r
INNER JOIN tags as t ON r.tag = t.id
GROUP BY t.id
ORDER BY item_count

これは機能しますが、追加すると

WHERE t.id = ?

item_count は常に 1 です...

1 つのタグまたは特定のタグ セットのみを選択する select ステートメントを使用してグローバル タグ カウントを取得する方法はありますか?

4

3 に答える 3

1

MySQL にはアクセスできませんが、Microsoft SQLServer にはアクセスできます。あなたのタグはmysqlを指定していることに気づきました。それでも、提示したクエリは SQLServer でエラーで失敗します

Msg 8120, Level 16, State 1, Line 1
Column 'tags.name' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

... select t.* が group by 句に含まれていないためです。

とにかく、特定の質問に対処するために、クロス結合を使用して特定のレコードを選択しながらグローバル番号を導出できます...

select
    t.*
    , vTagRelations.GlobalCountOfTagRelations
    , vTags.GlobalCountOfTags
from
    tags t
    cross join (select
        count(tag_relations.tag) as GlobalCountOfTagRelations
    from
        tag_relations) vTagRelations
    cross join (select
        count(tags.id) as GlobalCountOfTags
    from
        tags) vTags
where
    t.id = 2
于 2013-08-21T01:10:06.527 に答える
1

SQLフィドルで

http://www.sqlfiddle.com/#!2/ba97d/1

SELECT name,count(item) as counter_item
FROM tag_relations 
INNER JOIN tags ON 
tag_relations.tag =tags.id
order by counter_item

この線

where tags.id=1

必要に応じて追加可能

于 2013-08-21T02:43:18.873 に答える