mysql - 对 MYSQL 标签表进行排序

标签 mysql tags count

只是想知道是否可以获得前 10 COUNT 个结果并按 COUNT 和字母顺序排序?

我有下表,

tags
-------
id | title

.

tagged
------
tag_id | post_id

以及以下 SQL 查询

SELECT tag.*, COUNT(td.tag_ID) AS tagcount
FROM Tagged td
LEFT JOIN Tags tag ON td.tag_ID = tag.tag_ID
GROUP BY td.tag_ID
ORDER BY tagcount DESC, tag.tag_Title ASC

有什么想法吗?

提前致谢


编辑

抱歉,如果我没有正确解释。

查询有效,但我没有添加 LIMIT 10,因为我想先查看整个结果集。

我的查询有效,但是在以下示例结果中

tag_ID  tag_Title  tagcount
1          Science  3
3          Chemistry 2
4          Misc      1
5          Maths       1
2          Sport       1

不过,我希望化学高于科学。

即计数最高的前十名..按字母顺序排序


结果

谢谢你们……丹尼尔和斯莱德。

这是一个工作示例

( 
   SELECT     t.*, COUNT(*) AS tagcount
   FROM       tagged td
   LEFT JOIN  tags t ON (t.id = td.tag_id)
   GROUP BY   td.tag_id
   ORDER BY   tagcount DESC, t.title ASC
   LIMIT      3
) ORDER BY title ASC;

最佳答案

更新:

下面的新评论:

( 
   SELECT     t.*, COUNT(*) AS tagcount
   FROM       tagged td
   LEFT JOIN  tags t ON (t.id = td.tag_id)
   GROUP BY   td.tag_id
   ORDER BY   tagcount DESC, t.title ASC
   LIMIT      3
) ORDER BY title ASC;

结果:

+------+------------+----------+
| id   | title      | tagcount |
+------+------------+----------+
|    3 | javascript |        2 |
|    1 | mysql      |        2 |
|    2 | php        |        3 |
+------+------------+----------+
3 rows in set (0.00 sec)

只需将 LIMIT 3 更改为 LIMIT 10 即可获取前 10 个而不是前 3 个。


上一个答案:

为什么不在查询中添加LIMIT 10

SELECT     t.*, COUNT(*) AS tagcount
FROM       tagged td
LEFT JOIN  tags t ON (t.id = td.tag_id)
GROUP BY   td.tag_id
ORDER BY   tagcount DESC, t.title ASC
LIMIT      10;

测试用例:

CREATE TABLE tags (id int, title varchar(20));
CREATE TABLE tagged (tag_id int, post_id int);

INSERT INTO tags VALUES (1, 'mysql');
INSERT INTO tags VALUES (2, 'php');
INSERT INTO tags VALUES (3, 'javascript');
INSERT INTO tags VALUES (4, 'c');

INSERT INTO tagged VALUES (1, 1);
INSERT INTO tagged VALUES (2, 1);
INSERT INTO tagged VALUES (1, 2);
INSERT INTO tagged VALUES (2, 2);
INSERT INTO tagged VALUES (3, 3);
INSERT INTO tagged VALUES (2, 4);
INSERT INTO tagged VALUES (3, 4);
INSERT INTO tagged VALUES (4, 5);

结果(使用LIMIT 3):

+------+------------+----------+
| id   | title      | tagcount |
+------+------------+----------+
|    2 | php        |        3 |
|    3 | javascript |        2 |
|    1 | mysql      |        2 |
+------+------------+----------+
3 rows in set (0.00 sec)

请注意 [c] 标记如何从前 3 个结果中脱颖而出,并且在出现平局的情况下,行按字母顺序排序。

关于mysql - 对 MYSQL 标签表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3661676/

相关文章:

MySQL COUNT on WHERE 语句

MySQL:使用不存在数据的占位符初始化汇总表

PHP 在数据库中保存 session 。读取方法似乎不起作用

git - git 中标记提交的顺序是什么?

iphone - 如何通过longPressGestureRecognizer获取button.tag?

audio - 如何获取任何html标签的css键和值

php - Laravel 5.3 不同的计数,使用 Eloquent 而不是查询生成器

python - 日期列表中的时间序列-python

mysql - 使用关系数据库进行 Map Reduce

php - MySQL。选择年份范围