CREATE TABLE `vocabulary` (
`vid` int(10) unsigned NOT NULL auto_increment,
`name` varchar(255),
PRIMARY KEY vid (`vid`)
);
CREATE TABLE `term` (
`tid` int(10) unsigned NOT NULL auto_increment,
`vid` int(10) unsigned NOT NULL default '0',
`name` varchar(255),
PRIMARY KEY tid (`tid`)
);
CREATE TABLE `article` (
`aid` int(10) unsigned NOT NULL auto_increment,
`body` text,
PRIMARY KEY aid (`aid`)
);
CREATE TABLE `article_index` (
`aid` int(10) unsigned NOT NULL default '0',
`tid` int(10) unsigned NOT NULL default '0'
)
INSERT INTO `vocabulary` values (1, 'vocabulary 1');
INSERT INTO `vocabulary` values (2, 'vocabulary 2');
INSERT INTO `term` values (1, 1, 'term v1 t1');
INSERT INTO `term` values (2, 1, 'term v1 t2 ');
INSERT INTO `term` values (3, 2, 'term v2 t3');
INSERT INTO `term` values (4, 2, 'term v2 t4');
INSERT INTO `term` values (5, 2, 'term v2 t5');
INSERT INTO `article` values (1, "");
INSERT INTO `article` values (2, "");
INSERT INTO `article` values (3, "");
INSERT INTO `article` values (4, "");
INSERT INTO `article` values (5, "");
INSERT INTO `article_index` values (1, 1);
INSERT INTO `article_index` values (1, 3);
INSERT INTO `article_index` values (2, 2);
INSERT INTO `article_index` values (3, 1);
INSERT INTO `article_index` values (3, 3);
INSERT INTO `article_index` values (4, 3);
INSERT INTO `article_index` values (5, 1);
INSERT INTO `article_index` values (5, 4);
例以下のスキーマを持っています。 Defiend Vocabularyの用語を選択します。 VID = 2
select a.tid, count(*) as article_count from term t JOIN article_index a
ON t.tid = a.tid where t.vid = 2 group by t.tid;
+-----+---------------+ | tid | article_count | +-----+---------------+ | 3 | 3 | | 4 | 1 | +-----+---------------+
質問:
- 選択用語
。 (例:vid = 1 =>用語{1,2})
のような、defiendボキャブラリーフィルタ(a)は、特定の用語の記事にリンクされた用語のみを必要とする。 TID = 3、結果=> {1}、TIDとの用語は、= 2は、TIDの条件にないリンケージので除外されるので= 3
SQL:article_countとして正しくないが間違っている
SELECT t.tid, count(*) as c FROM term t JOIN article_index i ON t.tid = i.tid WHERE t.vid = 1 AND i.aid IN
(SELECT i.aid FROM term t JOIN article_index i ON t.tid = i.tid WHERE i.tid = 3)
GROUP BY t.tid ;
結果:
+-----+---------------+ | tid | article_count | +-----+---------------+ | 1 | 2 | +-----+---------------+
期待される結果:一つだけの記事では、両方のTID = 3、TID = 1
とリンクしているので3210
...
count(distinct t.vid)
にcount(*)
を交換する必要があります。人々は一般的にあなたのためのコードを書くのが好きではありません。それはそのままで、これは仕事の説明であり、質問ではありません。 –ありがとう、私は上記の私の現在の不正なSQLを追加しました。 – Howard