Foros del Web » Programando para Internet » PHP »

ordenar extraccion de datos de dos consultas

Estas en el tema de ordenar extraccion de datos de dos consultas en el foro de PHP en Foros del Web. Buenas a todos. Tengo una base de datos dos tablas: marcas_telefonos(id,marca,logo) modelos_telefonos (id,modelo,idmarca,precio,imagen) Y a continuación en PHP quiero extraer los datos, los extraigo de ...
  #1 (permalink)  
Antiguo 13/05/2011, 09:52
 
Fecha de Ingreso: noviembre-2008
Ubicación: el sol
Mensajes: 146
Antigüedad: 15 años, 6 meses
Puntos: 6
ordenar extraccion de datos de dos consultas

Buenas a todos. Tengo una base de datos dos tablas:
marcas_telefonos(id,marca,logo)
modelos_telefonos (id,modelo,idmarca,precio,imagen)

Y a continuación en PHP quiero extraer los datos, los extraigo de la siguiente manera:
Código PHP:
$sql3 "SELECT * FROM modelos_telefonos";
$result3=MySQL_query($sql3,$db);
while(
$myrow3=MySQL_fetch_array($result3))
    {
        
$idmodelo $myrow3["0"];
        
$modelo $myrow3["1"];
        
$idmarca $myrow3["2"];
        
$precio $myrow3["3"];
        
        
$sql5 "SELECT * FROM marcas_telefonos WHERE id='$idmarca'";
        
$result5=MySQL_query($sql5,$db);
        while(
$myrow5=MySQL_fetch_array($result5))
        {
            
$marcamodelo $myrow5["1"];
        }
        echo 
"$marcamodelo
                $modelo
        $precio €"
;

El problema es que los registros me salen como quieren, quiero que la extracción se haga por orden abecedário según la marca. Es decir, primero todos los que la marca empiece por A, despues los de la B... etc... No se si me he explicado, pero esque me aperece por ejemplo, primero los modelos de marca Alcatel, despues los de BlackBerry y despues los de Acer. Cuando Acer debería ser la primera marca, y despúes Alcatel.

Gracias, espero respuestas. Un saludo!
  #2 (permalink)  
Antiguo 13/05/2011, 09:56
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: ordenar extraccion de datos de dos consultas

Necesitas usar ORDER BY para ordenar los resultados de tu consulta, en tu consulta.

Al final tu problema no corresponde a PHP, sino a SQL que también es un lenguaje aparte.

__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 13/05/2011, 11:39
 
Fecha de Ingreso: septiembre-2009
Ubicación: Managua
Mensajes: 128
Antigüedad: 14 años, 8 meses
Puntos: 5
Respuesta: ordenar extraccion de datos de dos consultas

Hola amigo pues dandote una mano te pongo el codigo para que lo chequees

Código PHP:
$sql3 "SELECT * FROM modelos_telefonos";
$result3=MySQL_query($sql3,$db);
while(
$myrow3=MySQL_fetch_array($result3))
    {
        
$idmodelo $myrow3["0"];
        
$modelo $myrow3["1"];
        
$idmarca $myrow3["2"];
        
$precio $myrow3["3"];
        
        
$sql5 "SELECT * FROM marcas_telefonos WHERE id='$idmarca' ORDER BY marca ASC";
        
$result5=MySQL_query($sql5,$db);
        while(
$myrow5=MySQL_fetch_array($result5))
        {
            
$marcamodelo $myrow5["1"];
        }
        echo 
"$marcamodelo
                $modelo
        $precio €"
;

Saludos y espero te sirva
  #4 (permalink)  
Antiguo 13/05/2011, 12:19
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: ordenar extraccion de datos de dos consultas

no tiene sentido usar mysql_fetch_array() si no usaras el arreglo

mysql_fetch_array() facilita el acceso a los datos usando un arreglo con los nombres de las tablas, si no quieres usarlos y prefieres usar el indice solo usa mysql_fetch_row()

en otras palabras, tu subconsulta que está así:

Código PHP:
Ver original
  1. while($myrow5=MySQL_fetch_array($result5))
  2. {
  3.             $marcamodelo = $myrow5["1"];
  4. }

sería mas eficiente hacerla de alguna de estas 2 maneras:

Código PHP:
Ver original
  1. while($myrow5=MySQL_fetch_array($result5)){
  2.             $marcamodelo = $myrow5['id'];
  3. }

Código PHP:
Ver original
  1. while($myrow5=MySQL_fetch_row($result5)){
  2.             $marcamodelo = $myrow5[1];
  3. }

te digo esto por que se te hará mas fácil usar los nombres de cada campo ("id","marca",etc) que estar usando los números ("0","3",etc)
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #5 (permalink)  
Antiguo 13/05/2011, 13:14
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: ordenar extraccion de datos de dos consultas

Exacto!

La ventaja de usar índices literales en lugar de numerados es bien fácil: legibilidad.

Eso consigue que nuestro código sea mas sencillo de mantener, corregir, etc.

__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 13/05/2011, 20:37
 
Fecha de Ingreso: noviembre-2008
Ubicación: el sol
Mensajes: 146
Antigüedad: 15 años, 6 meses
Puntos: 6
Respuesta: ordenar extraccion de datos de dos consultas

Cita:
Iniciado por stramin Ver Mensaje
no tiene sentido usar mysql_fetch_array() si no usaras el arreglo

mysql_fetch_array() facilita el acceso a los datos usando un arreglo con los nombres de las tablas, si no quieres usarlos y prefieres usar el indice solo usa mysql_fetch_row()

en otras palabras, tu subconsulta que está así:

Código PHP:
Ver original
  1. while($myrow5=MySQL_fetch_array($result5))
  2. {
  3.             $marcamodelo = $myrow5["1"];
  4. }

sería mas eficiente hacerla de alguna de estas 2 maneras:

Código PHP:
Ver original
  1. while($myrow5=MySQL_fetch_array($result5)){
  2.             $marcamodelo = $myrow5['id'];
  3. }

Código PHP:
Ver original
  1. while($myrow5=MySQL_fetch_row($result5)){
  2.             $marcamodelo = $myrow5[1];
  3. }

te digo esto por que se te hará mas fácil usar los nombres de cada campo ("id","marca",etc) que estar usando los números ("0","3",etc)
Es decir, me aconsejais hacerlo asi en todas mis consultas SQL, no? Gracias por las respuestas!
  #7 (permalink)  
Antiguo 14/05/2011, 07:45
 
Fecha de Ingreso: noviembre-2008
Ubicación: el sol
Mensajes: 146
Antigüedad: 15 años, 6 meses
Puntos: 6
Respuesta: ordenar extraccion de datos de dos consultas

Gracias pro todas las respuestas, pero siguen sin ordenarse mis datos...
Código PHP:
$sql3 "SELECT * FROM modelos_telefonos Limit $inicio, $maxpg";
$result3=MySQL_query($sql3,$db);
while(
$myrow3=MySQL_fetch_array($result3))
    {
        
$idmodelo $myrow3["0"];
        
$modelo $myrow3["1"];
        
$idmarca $myrow3["2"];
        
$precio1 $myrow3["3"];
        
$precio2 $myrow3["4"];
        
$precio3 $myrow3["5"];
        
        
$sql5 "SELECT * FROM marcas_telefonos WHERE id='$idmarca' ORDER BY marca ASC";
        
$result5=MySQL_query($sql5,$db);
        while(
$myrow5=MySQL_fetch_array($result5))
        {
            
$marcamodelo $myrow5['marca'];
        } 
  #8 (permalink)  
Antiguo 14/05/2011, 08:12
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: ordenar extraccion de datos de dos consultas

Hola,

La cláusula ORDER BY se la debías haber puesto a la primera consulta SELECT:
Cita:
Iniciado por codek_orz Ver Mensaje
$sql3 = "SELECT * FROM modelos_telefonos Limit $inicio, $maxpg ORDER BY modelo";
En la consulta anidada, seguramente el campo ID es una clave primaria y por lo tanto solamente devuelve un registro, así que la cláusula ORDER BY pierde sentido:
Cita:
Iniciado por codek_orz Ver Mensaje
$sql5 = "SELECT * FROM marcas_telefonos WHERE id='$idmarca' ORDER BY marca ASC
Aunque ... la manera correcta de hacer esa consulta es:
Código PHP:
<?php
$sql3 
"
    select
      a.id IDMODELO,
      a.modelo,
      a.idmarca,
      a.precio,
      a.imagen,
      b.id,
      b.marca,
      b.logo
    from modelos_telefonos a
    innner join marcas_telefonos b on b.id = a.idmarca
    order by b.marca, a.modelo
    limit $inicio, $maxpg
"
;
$res3 mysql_query($sql3$db);
while (
$row3 mysql_fetch_assoc($res3)) {
  echo 
'El modelo es : ' $row3['modelo'];
  echo 
'La marcar es : ' $row3['marca'];
  echo 
'El ID del modelo es : ' $row3['IDMODELO'];
  echo 
'El ID de la marca es : ' $row3['idmarca'];
  echo 
'El precio es : ' $row3['precio'];
  
// ETC.. ETC...
}
?>
El código puede contener más de algún error puesto que no lo probé, es simplemente para que te des una idea de como hacer la consulta a las dos tablas en una sola instrucción.

Saludos,

Última edición por HackmanC; 14/05/2011 a las 08:24 Razón: assoc x array
  #9 (permalink)  
Antiguo 15/05/2011, 16:12
 
Fecha de Ingreso: noviembre-2008
Ubicación: el sol
Mensajes: 146
Antigüedad: 15 años, 6 meses
Puntos: 6
Respuesta: ordenar extraccion de datos de dos consultas

Esta de la siguiente manera:
Código PHP:
$sql3 "SELECT 
    a.id idmodelo,
    a.modelo,
    a.idmarca
    a.precio1,
    a.precio2,
    a.precio3,
    b.id,
    b.marca
    FROM modelos_telefonos a, marcas_telefonos b 
    INNER JOIN marcas_telefonos b ON b.id = a.idmarca
    ORDER BY b.marca, a.modelo
    LIMIT $inicio, $maxpg"
;
    
$res3=mysql_query($sql3$db);
    while(
$row3=mysql_fetch_array($res3)) {
    echo 
"MARCA: " .$row3['marca'];
    echo 
"MODELO: " .$row3['modelo'];
        } 
Me produce el siguiente error:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /mounted-storage/home5/sub001/sc21412-NVBP/goldenphone.es/back/modelos_telefonos.php on line 62

La línea 62 es la siguiente:
Código PHP:
    while($row3=mysql_fetch_array($res3)) { 
Creo qeu el error proviene de la consulta, pero no encuentro donde. Gracias a todos!

Última edición por codek_orz; 15/05/2011 a las 16:20
  #10 (permalink)  
Antiguo 15/05/2011, 17:59
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: ordenar extraccion de datos de dos consultas

Hola,

¿Y eso de donde salió?

Código:
$sql3 = "SELECT 
...
	FROM modelos_telefonos a, marcas_telefonos b 
	INNER JOIN marcas_telefonos b ON b.id = a.idmarca
	ORDER BY b.marca, a.modelo
	LIMIT $inicio, $maxpg";
Hay dos formas de hacer un JOIN, pero solamente puedes usar una de las dos; por el alias, si usaras otro alias podrías hacer una mezcla aunque no veo el motivo.

Código SQL:
Ver original
  1. SELECT ...
  2. FROM modelos_telefonos a, marcas_telefonos b
  3. WHERE b.id = a.idmarca
  4. ORDER BY b.marca, a.modelo
Código SQL:
Ver original
  1. SELECT ...
  2. FROM modelos_telefonos a
  3. INNER JOIN marcas_telefonos b ON b.id = a.idmarca
  4. ORDER BY b.marca, a.modelo
Saludos,
  #11 (permalink)  
Antiguo 16/05/2011, 01:26
 
Fecha de Ingreso: noviembre-2008
Ubicación: el sol
Mensajes: 146
Antigüedad: 15 años, 6 meses
Puntos: 6
Respuesta: ordenar extraccion de datos de dos consultas

He visto el fallo, me faltaba una ",". Aparte gracias por la aclaración cierto eso, eso lo sabía pero no lo recordaba, normalmente no me acostumbraba a usar INNER JOIN lo hacía de la otra forma más "rastrera" jeje. Un saludo y gracias!

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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 14:23.