Ver Mensaje Individual
  #3 (permalink)  
Antiguo 20/12/2005, 12:06
Avatar de hieloverde
hieloverde
 
Fecha de Ingreso: julio-2005
Ubicación: México, D.F
Mensajes: 467
Antigüedad: 18 años, 9 meses
Puntos: 5
Si, me falto explicar la forma en que se da el almacenamiento de los datos, a continuación explicare la mecánica:

Primero, confirmo que uso base de datos Mysql.

Como dije antes trabajo en la elaboración de un selector de canciones, por supuesto los datos de cada canción son almacenados en una tabla llamada ‘melodias’, dicha tabla tiene los siguientes campos:

id int(11) not null auto_increment primary key,
Titulo varchar(100) not null,
Autor varchar(100) not null,
Compositor varchar(100) not null,
Interprete varchar(100) not null,
Genero varchar(30) not null,
Duracion varchar(10) not null,
INTRO varchar(10) not null,
Categoria varchar(50) not null,
Estado varchar(10) DEFAULT 'Visible' not null,
Fecha_alta varchar(10) not null,
Fecha_mod varchar(10) not null,
Historial int(11) DEFAULT '0' not null,
Tocada int(11) DEFAULT '0' not null,
Ruta varchar(255) not null,

Ahora estos registros (canciones) se dividen principalmente por el campo ‘Categoria’ (POP, BALADA, RANCHERO y BANDA), entonces el usuario solicita distintas categorías y a partir de esas categorías solicitadas se deben seleccionar las canciones para obtener datos como: Titulo, Intérprete, Duración, etc.

Pero también el usuario debe poder especificar el número mínimo de canciones para repetir un mismo intérprete, esto es para que no salgan pegadas dos canciones del mismo interprete (el interprete de cada canción se almacena en el campo ‘Interprete’).

Tengo una tabla destinada para almacenar los intérpretes que se van seleccionando, llamada ‘bloqueo’ y tiene el siguiente campo:

Interprete varchar(100) not null primary key,

Si las canciones se fueran seleccionando en el orden que el usuario las solicito, no tendría problema en implementar la separación de intérprete, por que solo tendría que mantener un numero determinado de interpretes conforme se van seleccionando en la tabla ‘bloqueo’ y así aplicar la subconsulta SQL correspondiente para evitar que se junten interpretes iguales.

Para esto venia usando la siguienete consulta
Código PHP:
$s="melodias";
mysql_query("SELECT ".$s.".* FROM ".$s." LEFT JOIN bloqueo ON ".$s.".Interprete = bloqueo.Interprete WHERE bloqueo.Interprete IS NULL and ".$s.".Categoria='".$categoria[$x]."'"); 
Pero no es tan simple o al menos no lo es para mi, ya que las canciones tienen que ser seleccionadas dependiendo el numero de canciones que tenga la categoría correspondiente (de menor a mayor), la lógica de esto es seleccionar primero las categorías con menos canciones para evitar errores y con esto la lista pierde el orden que el usuario le dio en un principio y pues la separación de interprete no se aplica correctamente.

Como puse en el primer mensaje, la lista con las categorías que el usuario desea, quedan almacenadas en un array secuencial, gracias a esto me es mas sencillo reordenar esta lista dependiendo el numero de canciones que contiene cada categoría y lo mismo al final, reordeno la lista para que quede como el usuario la pidió, por eso pienso que quizás la solución podría estar en ir guardando los interpretes que se van seleccionando en otro array.

Mi único problema es que como las canciones no se seleccionan en el orden que se van a mostrar sino dependiendo el número de canciones que tiene la categoría que le corresponde, pues la separación no queda como debe ser.

Estoy dispuesto a aclarar cualquier otro punto que quedara turbio.

Un saludo.
__________________
<? echo("1 <script> dice + que 1000 palabras"); ?> EspacioMéxico

Última edición por hieloverde; 20/12/2005 a las 13:39