Posso eseguire un'istruzione select e ottenere il numero di riga se gli articoli sono ordinati?
Ho un tavolo come questo:
mysql> describe orders;
+-------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------------+------+-----+---------+----------------+
| orderID | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| itemID | bigint(20) unsigned | NO | | NULL | |
+-------------+---------------------+------+-----+---------+----------------+
Posso quindi eseguire questa query per ottenere il numero di ordini per ID:
SELECT itemID, COUNT(*) as ordercount
FROM orders
GROUP BY itemID ORDER BY ordercount DESC;
Questo mi dà un conto di ciascuno itemID
nella tabella in questo modo:
+--------+------------+
| itemID | ordercount |
+--------+------------+
| 388 | 3 |
| 234 | 2 |
| 3432 | 1 |
| 693 | 1 |
| 3459 | 1 |
+--------+------------+
Voglio ottenere anche il numero di riga, quindi potrei dire che itemID=388
è la prima riga, 234
è la seconda, ecc. (Essenzialmente la classifica degli ordini, non solo un conteggio grezzo). So che posso farlo in Java quando ottengo il risultato ripristinato, ma mi chiedevo se ci fosse un modo per gestirlo puramente in SQL.
Aggiornare
L'impostazione del grado lo aggiunge al set di risultati, ma non correttamente ordinato:
mysql> SET @rank=0;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @rank:=@rank+1 AS rank, itemID, COUNT(*) as ordercount
-> FROM orders
-> GROUP BY itemID ORDER BY rank DESC;
+------+--------+------------+
| rank | itemID | ordercount |
+------+--------+------------+
| 5 | 3459 | 1 |
| 4 | 234 | 2 |
| 3 | 693 | 1 |
| 2 | 3432 | 1 |
| 1 | 388 | 3 |
+------+--------+------------+
5 rows in set (0.00 sec)
ORDER BY rank ASC
(ordinamento per rango in ordine crescente). Immagino sia quello che intendi ma non correttamente ordinato