如何计算标题的第一个字母,加入标签表并打印A到Z.

时间:2018-01-30 21:28:00

标签: mysql sql

我正在尝试加入3个表并计算标题的每个首字母的标签。 我尝试了不同的方法并最终使其工作但我不确定它是否是最佳方式:

SELECT letter.letter as firstLetter, COUNT(item_tag.id) AS itemCount
        FROM letter
        left outer join item
             on left(item.title, 1) = letter.letter
        left outer join item_tag
            ON item_tag.item_id = item.id
        AND item_tag.tag_id = 1
        GROUP BY letter.letter

这是sqlfiddle链接: http://sqlfiddle.com/#!9/3155cd/2

这是我的表格:

档案:

+----+-----------------+
| id |      title      |
+----+-----------------+
|  1 | title goes here |
+----+-----------------+

标签:

+----+----------+
| id |   name   |
+----+----------+
|  1 | tag name |
+----+----------+

item_tag

+----+--------+---------+
| id | tag_id | item_id |
+----+--------+---------+
|  1 |      1 |       1 |
+----+--------+---------+

字母

+----+--------+
| id | letter |
+----+--------+
| 1  | A      |
| 2  | B      |
| .  | .      |
+----+--------+

1 个答案:

答案 0 :(得分:0)

计数是正确的。您正在计算标题上的标签数量。

根据SQL Fiddle中的数据,“Hhh”有两个标签,1和2.因此,“H”的计数为2。

“C”的计数为1,因为项目“3”没有标签,项目“4”有1个标签。

虽然正确,但您的查询不必要地复杂。您可以删除一个join

SELECT l.letter as first_letter, COUNT(it.id) AS tag_count
FROM letter l left outer join
     item i
     on left(i.title, 1) = l.letter left outer join
     item_tag it
     on it.item_id = i.id 
GROUP BY l.letter;

另请注意,将表的缩写用作表别名。这些使查询更容易理解。