Mysql
 sql >> Database >  >> RDS >> Mysql

Ordinamento della tabella dei tag MySQL

AGGIORNAMENTO:

Oltre al nuovo commento qui sotto:

( 
   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;

Risultato:

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

Basta cambiare il LIMIT 3 a LIMIT 10 per ottenere i primi 10 invece dei primi 3.

Risposta precedente:

Perché non aggiungi un LIMIT 10 alla tua domanda?

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;

Caso di prova:

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);

Risultato (usando LIMIT 3 ):

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

Nota come il [c] tag è uscito dai primi 3 risultati e le righe sono ordinate alfabeticamente in caso di parità.