Ordinamento personalizzato in MySQL
Quello che mi serve è questo: ordinare i dati partendo da un record specifico, e poi a seguire tutti gli altri.
Ho scoperto che è abbastanza semplice usando la funzione INSTR.
Supponiamo di avere una serie di autori:
SELECT * FROM author ORDER BY author_id;
+-----------+--------------------------------------+
| author_id | author_name |
+-----------+--------------------------------------+
| 1 | mcclure, scambray, kurtz |
| 2 | clive cussler |
| 3 | stephen king |
| 4 | cecchi paone |
| 5 | flem ath |
| 6 | nagel, evjen, glynn, watson, skinner |
| 8 | herman hesse |
| 10 | deitel - deitel |
| 11 | dave thau |
| 13 | cesare pavese |
+-----------+--------------------------------------+
Autori ordinati per id.
Supponiamo adesso che al primo posto voglio metterci clive cussler:
SELECT * FROM author ORDER BY INSTR('clive cussler', author_name) DESC;
+-----------+-------------------------------+
| author_id | author_name |
+-----------+-------------------------------+
| 2 | clive cussler |
| 80 | magnus lie hetland |
| 61 | shakespeare |
| 60 | plauto |
| 59 | clive cussler, paul kemprecos |
| 58 | machiavelli |
| 57 | michael crichton |
| 56 | moravia |
| 55 | jack london |
| 53 | arthur c. clarke |
+-----------+-------------------------------+
Usato la funzione INSTR passando come primo parametro il valore da cercare, e come secondo il campo in cui cercare.
Attenzione alla clausola DESC, fondamentale se si vuole mettere il valore come primo; sennò l'ordine risulterà inverso.
Possiamo cercarne anche più di uno:
SELECT * FROM author ORDER BY INSTR('clive cussler plauto', author_name) DESC;
+-----------+-------------------------------+
| author_id | author_name |
+-----------+-------------------------------+
| 60 | plauto |
| 2 | clive cussler |
| 80 | magnus lie hetland |
| 61 | shakespeare |
| 59 | clive cussler, paul kemprecos |
| 58 | machiavelli |
| 57 | michael crichton |
| 56 | moravia |
| 55 | jack london |
| 53 | arthur c. clarke |
+-----------+-------------------------------+
Vanno messi insieme sempre dentro al primo parametro.
Se volessimo cercare invece nel campo id (che è numerico):
SELECT * FROM author ORDER BY INSTR('2', author_id) DESC;
+-----------+-------------------------------+
| author_id | author_name |
+-----------+-------------------------------+
| 2 | clive cussler |
| 80 | magnus lie hetland |
| 61 | shakespeare |
| 60 | plauto |
| 59 | clive cussler, paul kemprecos |
| 58 | machiavelli |
| 57 | michael crichton |
| 56 | moravia |
| 55 | jack london |
| 53 | arthur c. clarke |
+-----------+-------------------------------+
Il valore da ricercare va comunque tra virgolette.
mysql query select instr
Commentami!