Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Ordenar en consulta anidada

Estas en el tema de Ordenar en consulta anidada en el foro de Mysql en Foros del Web. Tengo una consulta dentro de otra, lo que hago en la primera es seleccionar de una tabla los canales por ejemplo de peliculas. En la ...
  #1 (permalink)  
Antiguo 12/03/2010, 20:25
 
Fecha de Ingreso: junio-2003
Mensajes: 4
Antigüedad: 20 años, 10 meses
Puntos: 0
Ordenar en consulta anidada

Tengo una consulta dentro de otra, lo que hago en la primera es seleccionar de una tabla los canales por ejemplo de peliculas.

En la segunda segun la fecha y horas seleccionadas, listarlos a esos que los toma de otra tabla.

tabla canales:
nombre_c -- ej. HBO
tipo --------- ej. peliculas

tabla cable:
nombre_canal -- ej. HBO
hora_c ----------- ej. 21:00
prog_canal ------ ej. La Casa del sol

El tema es que no puedo ordenarlos por hora (2º consulta), ya que veo que me ordena solo por la primer consulta, por ejemplo canales en forma ascendente.
Necesito ordenarlos por la segunda consulta....a ver si a alguien me da una mano y se le ocurre otro tipo de consulta.

ejemplo primera consulta me trae: cinecanal - moviecity - hbo
la segunda: 22:00 - HBO - programa
22:30 - HBO - programa
21:30 - cinecanal - programa
23:00 - cinecanal - programa

Me queda ordenado por Canal y no por horas, se entiende?
Muchisimas gracias!

$toton = "SELECT * FROM canales WHERE tipo='peliculas'";
$cadun = mysql_db_query($base_dato,$toton) or die (mysql_error());

while($array = mysql_fetch_array($cadun)) {

$pegare = "SELECT * FROM cable WHERE (hora_c >= '$ahora1' AND hora_c <= '$despues') AND (nombre_canal='$array[nombre]') AND (fecha = '$eldiahoy') ORDER BY hora_c ASC";

$cade = mysql_db_query($base_dato,$pegare) or die (mysql_error());

while($array1 = mysql_fetch_array($cade)) {

echo "$array1[hora_c] -$array1[nombre_canal] - $array1[prog_canal]";

}


}
  #2 (permalink)  
Antiguo 12/03/2010, 21:00
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 9 meses
Puntos: 150
Respuesta: Ordenar en consulta anidada

Prueba con esto, te explico primero. En el primer bucle acumulamos las condiciones con OR, para luego incrustarlo en la segunda consulta, asi con 1 sola consulta te va a tomar todos los registros de dichos canales, y ordenados por la columna correcta:

Código PHP:
Ver original
  1. $txt="";
  2.  
  3. $toton = "SELECT * FROM canales WHERE tipo='peliculas'";
  4. $cadun = mysql_db_query($base_dato,$toton) or die (mysql_error());
  5. while($array = mysql_fetch_array($cadun)) {
  6. $txt=$txt."nombre_canal='$array[nombre]' OR "; // Vamos acumulando las condiciones
  7. }
  8. $txt=left($txt,strlen($txt)-4)); // quitamos el ultimo OR
  9.  
  10.  
  11. $pegare = "SELECT * FROM cable WHERE (hora_c >= '$ahora1' AND hora_c <= '$despues') AND ($txt) AND (fecha = '$eldiahoy') ORDER BY hora_c ASC";
  12. $cade = mysql_db_query($base_dato,$pegare) or die (mysql_error());
  13. while($array1 = mysql_fetch_array($cade)) {
  14. echo "$array1[hora_c] -$array1[nombre_canal] - $array1[prog_canal]";
  15. }



Ya me diras, si te sirvio
  #3 (permalink)  
Antiguo 13/03/2010, 08:45
 
Fecha de Ingreso: junio-2003
Mensajes: 4
Antigüedad: 20 años, 10 meses
Puntos: 0
Respuesta: Ordenar en consulta anidada

Muchisimas gracias Vun!
inteligente opción! ya me seguirá sirviendo para otras cosas seguramente.

Solo reemplacé la función left() que en php habria que crearla,
por substr() para simplificar.

Un abrazo y te agradezco mucho por la ayuda!


$txt="";
$toton = "SELECT * FROM canales WHERE tipo='peliculas'";
$cadun = mysql_db_query($base_dato,$toton) or die (mysql_error());

while($array = mysql_fetch_array($cadun)) {
$txt=$txt."nombre_canal='$array[nombre]' OR "; // Vamos acumulando las condiciones
}

// $txt=left($txt,strlen($txt)-4); // quitamos el ultimo OR
$txt = substr($txt, 0, -4); // quitamos el ultimo OR

$pegare = "SELECT * FROM cable WHERE (hora_c >= '$ahora1' AND hora_c <= '$despues') AND ($txt) AND (fecha = '$eldiahoy') ORDER BY hora_c ASC";

$cade = mysql_db_query($base_dato,$pegare) or die (mysql_error());

while ($array1 = mysql_fetch_array($cade) {
echo "$array1[hora_c] -$array1[nombre_canal] - $array1[prog_canal]";
}
  #4 (permalink)  
Antiguo 13/03/2010, 14:22
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 9 meses
Puntos: 150
Respuesta: Ordenar en consulta anidada

Me alegro , me he acordado que hay otra forma de hacer la sentencia, seria algo asi:

... WHERE nombre_canal IN ('primero','segundo','tercero') ...

Por si no te gusta tanto OR seguido jej

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:54.