Ver Mensaje Individual
  #5 (permalink)  
Antiguo 12/03/2014, 08:44
VityOsma
Invitado
 
Mensajes: n/a
Puntos:
Busqueda Procedimiento con variable en limit.

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 original
  1. delimiter //
  2. CREATE PROCEDURE reproductorGeneros (IN artista VARCHAR(50))
  3. BEGIN
  4. DECLARE cont INT;
  5. DECLARE alea INT;
  6. SET alea = rand() * 10;
  7. SELECT COUNT(*) INTO cont FROM canciones,artistas WHERE canciones.artista = artistas.nombre
  8.                                     AND artistas.url = artista
  9.                                 OR canciones.artista2 = artistas.nombre
  10.                                     AND artistas.url = artista
  11.                                 OR canciones.artista3 = artistas.nombre
  12.                                     AND artistas.url = artista
  13.                                 OR canciones.artista4 = artistas.nombre
  14.                                     AND artistas.url = artista;
  15. IF cont >= 10 THEN SET cont = 10; END IF;
  16. SET alea = rand() * (cont-1);
  17. SELECT canciones.nombre,idvideo,artista,artista2,artista3,artista4
  18.                             FROM canciones,artistas
  19.                                 WHERE canciones.artista = artistas.nombre
  20.                                     AND artistas.url = artista
  21.                                 OR canciones.artista2 = artistas.nombre
  22.                                     AND artistas.url = artista
  23.                                 OR canciones.artista3 = artistas.nombre
  24.                                     AND artistas.url = artista
  25.                                 OR canciones.artista4 = artistas.nombre
  26.                                     AND artistas.url = artista
  27.                                 GROUP BY idvideo ORDER BY canciones.rank DESC, canciones.nombre LIMIT alea,1;
  28. END
  29. //

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!

Última edición por gnzsoloyo; 12/03/2014 a las 10:31