Cita: La tabla la tengo así porque quiero que los artistas se mantengan en el orden en el que los he metido, el primero como artista el segundo como artista2 etc, si tuviera otra tabla de artistas con un registro para cada artista en cada canción perdería esta orden, así que me gusta así.
Sigue siendo un error de diseño. No necesitas hacer una tabla con serios problemas de normalización para eso, sino usar el mismo principio de diseño del detalle de una factura, sólo que en lugar de ser los subitems de una compra, son cada uno de los artistas ingresados.
Además, al normalizar esa tabla te evitas restringir la cantidad de artistas a cinco, y también eliminas campos nulos o vacíos qu eno se encesitan. Adicionalmente se simplifica la query en mucho... realmente mucho.
Cita: Tu código no me funciona,
Ese es el tipo de respuestas que no nos aporta la información necesaria...
¿No funciona porque genera un error de sintaxis, por errores de datos o porque el resultado no es exactamente el esperado?
Cita: sabes como podría obtener 1 resultado aleatorio entre los 10 primero resultados, en este caso, serían las canciones con un RANC más alto, no se como hacerlo sin utilizar una variable en el LIMIT. El resultado que necesito es la consulta que me devuelva uno de los 10 primeros registros.
Es sencillo, si lo deduces de tus propias palabras:
Necesitas uno al azar, de los diez rankings más altos...
1) Ordenas por ranking, y tomas los diez primeros.
2) Reordenas al azar esos diez, y tomas el primero...
Algo como esto probablemente funcione para tu uso:
Adaptalo a tus tablas.