Long-time reader, first-time poster here.
I’m trying to figure out how to sort a list of artists for a music app I’m writing.
To help understand the database structure: Rather than having a relational system where each song in the songs table has an artist ID that references a row in the artists table, I simply have a list of songs with the artist’s name as a string in a column. I then use GROUP BY artist in a MySQL query to return a list of individual artists.
My app retrieves this data from my server in the form of a JSON-encoded array which is the result of the following MySQL query:
SELECT artist FROM songs GROUP BY artist ORDER BY artist ASC
However, this query results with artists with names like &i, +NURSE, and 2007excalibur2007 being sorted before the alphabetical results (such as AcousticBrony, ClaireAnneCarr, d.notive, etc.).
What I need is the artists whose names begin with numbers and symbols returned after the alphabetically-sorted artist list.
The solution can be PHP-based, but I’d prefer the elegance of it being done in the MySQL query.
This will put all the artists who’s names begin with a letter in a-z before those that don’t:
See it working online: sqlfiddle
But you might prefer to store a second column with the simplified name so that you can put them in an order that makes more sense:
The values for
simplified_namecannot be easily generated in MySQL, so you may want to use a general purpose programming language to pull out all the artists, transform them to simplified names, then populate the database with the results.Once this is done, you can use this query: