Hola tengo un problema con mis procedimiento al subirlos a mi servidor MySQL.
En MySQL 5.X no se pueden utilizar variables dentro de la clausula LIMIT, y uno de mis procedimientos la necesita, así que necesito una solución para conseguir este resultado.
Código SQL:
Ver originaldelimiter //
CREATE PROCEDURE reproductorGeneros (IN artista VARCHAR(50))
BEGIN
DECLARE cont INT;
DECLARE alea INT;
SET alea = rand() * 10;
SELECT COUNT(*) INTO cont FROM canciones,artistas WHERE canciones.artista = artistas.nombre
AND artistas.url = artista
OR canciones.artista2 = artistas.nombre
AND artistas.url = artista
OR canciones.artista3 = artistas.nombre
AND artistas.url = artista
OR canciones.artista4 = artistas.nombre
AND artistas.url = artista;
IF cont >= 10 THEN SET cont = 10; END IF;
SET alea = rand() * (cont-1);
SELECT canciones.nombre,idvideo,artista,artista2,artista3,artista4
FROM canciones,artistas
WHERE canciones.artista = artistas.nombre
AND artistas.url = artista
OR canciones.artista2 = artistas.nombre
AND artistas.url = artista
OR canciones.artista3 = artistas.nombre
AND artistas.url = artista
OR canciones.artista4 = artistas.nombre
AND artistas.url = artista
GROUP BY idvideo ORDER BY canciones.rank DESC, canciones.nombre LIMIT alea,1;
END
//
Como podéis ver, lo que hago es buscar el numero de resultados de una consulta SQL y después busco un registro aleatorio dentro de los 10 primero, comprobando antes que hay más de 10 resultados, en caso contrario buscare uno entre el número de registros devueltos en al consulta inicial.
El problema es como ya os he dicho que no me permite utilizar variables en la clausula LIMIT al pasar la DB al servidor, ¿A alguien se le ocurre como puedo solucionarlo? Gracias!