Foros del Web » Programando para Internet » PHP »

Registros ordenados alfabéticamente usando datos de distintas tablas

Estas en el tema de Registros ordenados alfabéticamente usando datos de distintas tablas en el foro de PHP en Foros del Web. Hola a tod@s! Es un poco largo, pero a ver si me podéis ayudar: Estoy intentando que me salgan ordenados alfabéticamente varios productos según el ...

  #1 (permalink)  
Antiguo 24/07/2009, 05:33
Avatar de Anastasiaphp  
Fecha de Ingreso: junio-2006
Ubicación: El patio de mi casa
Mensajes: 196
Antigüedad: 17 años, 10 meses
Puntos: 3
Registros ordenados alfabéticamente usando datos de distintas tablas

Hola a tod@s!

Es un poco largo, pero a ver si me podéis ayudar:

Estoy intentando que me salgan ordenados alfabéticamente varios productos según el criterio de búsqueda seleccionado por el usuario, os cuento lo que he hecho y lo que quiero que aparezca (más abajo está el código):

1) Tengo una QUERY con un while que me busca todos los id_relacion que coincidan con el criterio de búsqueda seleccionado por el usuario
2) Dentro de este while, existe otra QUERY con otro while que busca en la tabla productos todos los productos que coincidan con los id_relacion hallados anteriormente
3) Ahora quiero que me salgan todos los productos ordenados alfabéticamente sin tener en cuenta un primer orden de los id_relacion.
Lo que me sale es esto (por ejemplo):

(id_relacion = 1)
prod asa
prod boa
prod kilo

(id_relacion = 2)
prod aniv
prod tela
prod yoyo

Lo que quiero es esto:
(que junte ambos)

prod aniv
prod asa
prod boa
prod kilo
prod tela
prod yoyo

¿Se os ocurre cómo hacerlo? ¡Gracias!

Aquí dejo el código:



Código PHP:
    // 1) Buscamos la relación dependiendo de si la búsqueda es con id_categoria o con id_marca o con id_categoria e id_marca
    
        
if(!empty($id_categoria) && empty($id_marca)){
        
            
$conn db_connect();
            
$query_r =
            
"
            SELECT *
            FROM relaciones
            WHERE id_categoria=$id_categoria
            "
;    
            
            }
            
        else if    (!empty(
$id_marca) && empty($id_categoria)){
        
            
$conn db_connect();
            
$query_r =
            
"
            SELECT *
            FROM relaciones
            WHERE id_marca=$id_marca
            "
;    
            
            }
        
        else if    (!empty(
$id_marca) && !empty($id_categoria)){
        
            
$conn db_connect();
            
$query_r =
            
"
            SELECT *
            FROM relaciones
            WHERE id_marca=$id_marca
            AND id_categoria=$id_categoria
            "
;    
            
            }
    
    
        
$result_r = @$conn->query($query_r);
        
$num_rows_r $result_r->num_rows;
        
        
//echo "Relaciones encontradas: ";
        //echo $num_rows_r;
        //echo "<br />";
    
    
    // 2) Buscamos la marca, sección y categoría
    
        
if(!empty($num_rows_r)){
        
            echo 
"Ordenar por: <a href=\""$PHP_SELF "?" $_SERVER['QUERY_STRING'] . "&orden=precio\">Precio</a> | ";
            echo 
"<a href=\""$PHP_SELF "?" $_SERVER['QUERY_STRING'] . "&orden=nombre_producto\">Nombre</a><br />";
                    
            
            while(
$row_r $result_r->fetch_assoc())
                {                
                    
                    
$id_relacion $row_r['id_relacion'];
                    
                    
$conn db_connect();
                    
$query_mc =
                    
"
                    SELECT *
                    FROM marcas, categorias, relaciones, secciones
                    WHERE secciones.id_seccion=$id_seccion
                    AND relaciones.id_relacion=$id_relacion
                    AND relaciones.id_marca=marcas.id_marca
                    AND relaciones.id_categoria=categorias.id_categoria
                    "
;
                        
                        
// Estos datos los uso luego 
                        
$result_mc = @$conn->query($query_mc);
                        
$row_mc $result_mc->fetch_assoc();
                        
                    
                    
// 2.1) Busco los productos dependiendo de si existe $frase o no
                    
                    
$conn db_connect();
                    if (!empty(
$frase)){
                                        
                            
$query_producto =
                            
"
                            SELECT *
                            FROM productos
                            WHERE MATCH (nombre_producto, texto_producto)
                            AGAINST ('$frase' IN BOOLEAN MODE)
                            AND id_relacion = $id_relacion
                            ORDER BY $orden ASC
                            "
;
                        }    
                    
                    else {    
                            
$query_producto =
                            
"
                            SELECT *
                            FROM productos
                            WHERE id_relacion = $id_relacion
                            ORDER BY $orden ASC
                            "
;
                        }
                
                    
                    
$result_producto=@$conn->query($query_producto);
                    
$num_rows $result_producto->num_rows;
    
                    
// 2.2) Saco el número total de productos y la sección y categoría a la que pertenecen
                    
                    
if ($num_rows!=0){
                    
                        echo 
"--\n<div id='guia'>\n";
                        echo 
$row_mc['nombre_seccion'];
                        echo 
" &gt; ";
                        echo 
$row_mc['nombre_categoria'];
                        echo 
"<br />\n<span class='prod_encontrados'>Total: ";
                        echo 
$num_rows;
                        echo 
"</span>";
                        echo 
"\n</div>\n";
                                
                    }    
            
                    
// 2.3) Saco los datos de los productos
    
                    
while($row_producto=$result_producto->fetch_assoc())
                        {
    
                        echo 
"\n<div id='producto'>\n";
                            echo 
"<div id='img_dcha'>";
                            echo 
"<img src='imagen_mini.php?valor=" $row_producto['id_producto'] .".jpg' />";
                            echo 
"</div>\n";    
                        
                        echo 
"<div id='capa_listado'>\n";    
                            echo 
"<div id='tit_producto'>";
                            echo 
"[" .$row_mc['nombre_marca']. "] ";
                            echo 
"<a href='busqueda.php?id_seccion=" $id_seccion "&id_categoria=" $id_categoria "&id_marca=" $id_marca "&id_producto=" $row_producto['id_producto'] .  "&id_relacion=" $id_relacion "&frase=" $frase "'>";
                            echo 
$row_producto['nombre_producto'];
                            echo 
"</a>";
                            echo 
"</div>\n";    
                            echo 
"Precio: ";
                            echo 
number_format($row_producto['precio'], 2',' '.');
                            echo 
" &euro;<br />";                                        
                        echo 
"\n</div>\n";
                        echo 
"</div>\n";                                    
                        }
                        
}    
//----- final de while($row_r = $result_r->fetch_assoc())


//---- FINAL DE if(!empty($num_rows_r))
        
            
else{
            echo 
"<br />No se han encontrado productos<br />";
            } 
  #2 (permalink)  
Antiguo 24/07/2009, 06:09
Avatar de abidibo  
Fecha de Ingreso: mayo-2009
Mensajes: 121
Antigüedad: 14 años, 10 meses
Puntos: 7
Respuesta: Registros ordenados alfabéticamente usando datos de distintas tablas

Bueno yo intentaria algo asì
Código PHP:
$results $result_r->fetch_assoc();
$query "SELECT * FROM productos WHERE MATCH (nombre_producto, texto_producto) AGAINST ('$frase' IN BOOLEAN MODE) AND id_relacion IN (".implode(",",$results).") ORDER BY $orden ASC"
ps: tienes muchas ripeticiones de codigo, como la conexion al DB, y tambien la primera parte con los tre 'if' se puede recortar mucho.
Chao!
  #3 (permalink)  
Antiguo 24/07/2009, 08:09
Avatar de Anastasiaphp  
Fecha de Ingreso: junio-2006
Ubicación: El patio de mi casa
Mensajes: 196
Antigüedad: 17 años, 10 meses
Puntos: 3
Respuesta: Registros ordenados alfabéticamente usando datos de distintas tablas

Gracias abidibo!

He probado lo que me dices pero no me funciona, me da el mismo resultado, he supuesto que la query a la que te refieres sería en mi código $query_producto y en vez de $results he utilizado $row_r, para no hacerme lío, me queda así:

Código PHP:
if (!empty($frase)){
                    
    
$query_producto =
    
"
    SELECT *
    FROM productos
    WHERE MATCH (nombre_producto, texto_producto)
    AGAINST ('$frase' IN BOOLEAN MODE)
    AND id_relacion IN ("
.implode(",",$row_r).")
    ORDER BY $orden ASC
    "
;

Tienes razón en cuanto a reducir el código, tengo que limpiarlo un poco
  #4 (permalink)  
Antiguo 24/07/2009, 08:19
Avatar de abidibo  
Fecha de Ingreso: mayo-2009
Mensajes: 121
Antigüedad: 14 años, 10 meses
Puntos: 7
Respuesta: Registros ordenados alfabéticamente usando datos de distintas tablas

Eliminaste el bucle while ese:
while($row_r = $result_r->fetch_assoc())
y si la respuesta es si, pon otra vez el codigo entero.
Ciao
  #5 (permalink)  
Antiguo 24/07/2009, 08:25
Avatar de Anastasiaphp  
Fecha de Ingreso: junio-2006
Ubicación: El patio de mi casa
Mensajes: 196
Antigüedad: 17 años, 10 meses
Puntos: 3
Respuesta: Registros ordenados alfabéticamente usando datos de distintas tablas

Si elimino el bucle se me queda la página en blanco...
  #6 (permalink)  
Antiguo 24/07/2009, 08:35
Avatar de Anastasiaphp  
Fecha de Ingreso: junio-2006
Ubicación: El patio de mi casa
Mensajes: 196
Antigüedad: 17 años, 10 meses
Puntos: 3
Respuesta: Registros ordenados alfabéticamente usando datos de distintas tablas

Me salía la página en blanco porque me faltaba un ;

El problema es que si quito el bucle: while($row_r = $result_r->fetch_assoc()) entonces solo me saca los productos del primer id_relacion
  #7 (permalink)  
Antiguo 24/07/2009, 09:19
Avatar de abidibo  
Fecha de Ingreso: mayo-2009
Mensajes: 121
Antigüedad: 14 años, 10 meses
Puntos: 7
Respuesta: Registros ordenados alfabéticamente usando datos de distintas tablas

que raro..
haz asì, pon
Código PHP:
$results $result_r->fetch_assoc();
var_dump($results
y dime lo que te imprime en la pagina, o sea el resultado de var_dump
  #8 (permalink)  
Antiguo 24/07/2009, 09:34
Avatar de Anastasiaphp  
Fecha de Ingreso: junio-2006
Ubicación: El patio de mi casa
Mensajes: 196
Antigüedad: 17 años, 10 meses
Puntos: 3
Respuesta: Registros ordenados alfabéticamente usando datos de distintas tablas

He comprobado que al quitar el while, lo que en realidad me hace no es sacar solo los productos del primer id_relacion sino que mezcla datos y saca lo que quiere.

Este es el resultado al utilizar var_dump:

array(5) { ["id_relacion"]=> string(2) "25" ["id_categoria"]=> string(1) "4" ["id_marca"]=> string(2) "19" ["id_seccion"]=> string(1) "2" ["vacio"]=> string(1) "0" }

(Gracias abidibo por la ayuda que me estás prestando)
  #9 (permalink)  
Antiguo 24/07/2009, 09:49
Avatar de abidibo  
Fecha de Ingreso: mayo-2009
Mensajes: 121
Antigüedad: 14 años, 10 meses
Puntos: 7
Respuesta: Registros ordenados alfabéticamente usando datos de distintas tablas

Si claro...
non seleciones todos los records en la primera query, porque m parece que solo utilizas el id, o sea
Código PHP:
$where = array();
if(
$id_categoria$where[] = "id_categoria=$id_categoria";
if(
$id_marca$where[] = "id_marca=$id_marca";
$where_string = (count($where)>0)? "WHERE ".implode(' AND '$where):"";
$conn db_connect();
$query_r " SELECT id_relacion FROM relaciones $where";    

$result_r = @$conn->query($query_r);
$num_rows_r $result_r->num_rows;            

if(
$num_rows_r) {

  
// ...

  
$results $result_r->fetch_assoc();  // aqui tendrias que tener todos los id_relaciones selecionados con la primera query

  
$query "SELECT * FROM productos 
                  WHERE MATCH (nombre_producto, texto_producto)      
                  AGAINST ('$frase' IN BOOLEAN MODE) 
                  AND id_relacion IN ("
.implode(",",$results).") 
                  ORDER BY $orden ASC"
;  
  
$final_result mysql_query($query);

  
/*
   *    sigue....
   */

  #10 (permalink)  
Antiguo 24/07/2009, 10:01
Avatar de Anastasiaphp  
Fecha de Ingreso: junio-2006
Ubicación: El patio de mi casa
Mensajes: 196
Antigüedad: 17 años, 10 meses
Puntos: 3
Respuesta: Registros ordenados alfabéticamente usando datos de distintas tablas

Gracias adibido, ahora tengo que irme pero lo probaré el fin de semana a ver si me funciona. Lo que si veo que faltaría es un if en el caso de que existan los dos ids: el id_categoria y el id_marca.

Te contaré a ver qué tal...
  #11 (permalink)  
Antiguo 26/07/2009, 03:23
Avatar de Anastasiaphp  
Fecha de Ingreso: junio-2006
Ubicación: El patio de mi casa
Mensajes: 196
Antigüedad: 17 años, 10 meses
Puntos: 3
Respuesta: Registros ordenados alfabéticamente usando datos de distintas tablas

Pues no consigo el resultado que quiero...

Me sigue ocurriendo que si elimino el primer bucle: solo salen los productos del primer id_relacion. Con el bucle, salen todos los productos que quiero pero no todos juntos, sino separados por cada id_relacion al que pertenecen. Con lo cual, estoy igual que al principio (eso sí, con el código más limpio )

Yo pienso que de alguna manera tengo que poder decir una vez que tengo el resultado de todos los productos, decirle que los reordene de nuevo, bien por precio, bien por orden alfabético, pero no sé cómo hacer esto...

Vuelvo a poner el código que tengo hasta ahora con tu ayuda, abidibo (he eliminado algunas partes que no son necesarias de momento para que sea más claro)

Gracias mil!!!

Código PHP:
if($id_categoria or $id_marca){
                    
    
// 1) Busco la relación dependiendo de si la búsqueda es con id_categoria o con id_marca o con id_categoria e id_marca
            
        
$where = array(); 
        if(
$id_categoria && !$id_marca$where[] = "id_categoria=$id_categoria"
        else if(
$id_marca && !$id_categoria$where[] = "id_marca=$id_marca"
        else if(
$id_categoria && $id_marca$where[] = "id_marca=$id_marca AND id_categoria=$id_categoria"
        
$where_string = (count($where)>0)? "WHERE ".implode(' AND '$where):""
        
        
$conn db_connect(); 
        
$query_r " SELECT id_relacion FROM relaciones $where_string";     
        
        
$result_r = @$conn->query($query_r); 
        
$num_rows_r $result_r->num_rows;             


    
// 2) Busco la marca, sección, categoria y productos
    
        
if($num_rows_r){
            while(
$row_r $result_r->fetch_assoc()){
                
//$row_r = $result_r->fetch_assoc(); // aqui tendrias que tener todos los id_relaciones selecionados con la primera query
        
                        
$query_producto =
                        
"
                        SELECT *
                        FROM productos
                        WHERE id_relacion IN ("
.implode(",",$row_r).")
                        ORDER BY $orden ASC
                        "
;
            
                    
$result_producto=@$conn->query($query_producto);
                    
$num_rows $result_producto->num_rows;
                    
                    
// 2.1) Extraigo la sección y categoría a la que pertenecen los productos
                    
                    
if ($num_rows!=0){
                    
                        
$id_relacion $row_r['id_relacion'];
                        
                        
$conn db_connect(); 
                        
$query_mc =
                        
"
                        SELECT *
                        FROM marcas, categorias, relaciones, secciones
                        WHERE secciones.id_seccion=$id_seccion
                        AND relaciones.id_relacion=$id_relacion
                        AND relaciones.id_marca=marcas.id_marca
                        AND relaciones.id_categoria=categorias.id_categoria
                        "
;
                        
                        
$result_mc = @$conn->query($query_mc);
                        
$row_mc $result_mc->fetch_assoc();
                                
                    }    
                    
            
                    
// 2.2) Extraigo los datos de los productos
    
                    
while($row_producto=$result_producto->fetch_assoc()){ 
                      
/** DATOS DE LOS PRODUCTOS **/            
                        
}
                        
                }
        }
        
            else{
            echo 
"<br />No se han encontrado productos<br />";
            }
    


Última edición por Anastasiaphp; 26/07/2009 a las 09:46 Razón: Error en el texto (he puesto en negrita lo cambiado)
  #12 (permalink)  
Antiguo 26/07/2009, 11:56
Avatar de Anastasiaphp  
Fecha de Ingreso: junio-2006
Ubicación: El patio de mi casa
Mensajes: 196
Antigüedad: 17 años, 10 meses
Puntos: 3
Pregunta Respuesta: Registros ordenados alfabéticamente usando datos de distintas tablas

He pensado que puedo hacer lo siguiente pero no sé cómo hacerlo:

En vez de "imprimir" los datos mientras los va extrayendo de la BD, guardarlos todos en un array y cuando terminen los bucles, "imprimirlos" en pantalla ordenados alfabéticamente (tengo que tener también la opción de ordenarlos por precio); el problema es que no sé cómo hacerlo ¿alguna idea? ¿alguien que sepa cómo puedo hacerlo y me quiera ayudar?
  #13 (permalink)  
Antiguo 26/07/2009, 21:43
 
Fecha de Ingreso: diciembre-2008
Mensajes: 268
Antigüedad: 15 años, 4 meses
Puntos: 0
Mensaje Respuesta: Registros ordenados alfabéticamente usando datos de distintas tablas

hola..

has probado con llamar tus resultados, cada uno en un campo de text o hidden y darle a cada resultado una variable y de ahi ordenarlos alfabeticamente?

cuando me enfrento a ordenar (y reutilizar) datos extraidos de 2 tablas hago eso... si logras hacerlo con tu metodo te agradeceria nos contaras como lo lograste

EXITOS !
  #14 (permalink)  
Antiguo 27/07/2009, 01:27
Avatar de abidibo  
Fecha de Ingreso: mayo-2009
Mensajes: 121
Antigüedad: 14 años, 10 meses
Puntos: 7
Respuesta: Registros ordenados alfabéticamente usando datos de distintas tablas

Cita:
Lo que si veo que faltaría es un if en el caso de que existan los dos ids
Eso no, porque lleno el array $where, i luego hago el implode entonces no hace falta poner un if o otra cosa...
El problema sigue porque he echo un error, a ver si asì funciona:
Código PHP:
$where = array();
if(
$id_categoria$where[] = "id_categoria=$id_categoria";
if(
$id_marca$where[] = "id_marca=$id_marca";
$where_string = (count($where)>0)? "WHERE ".implode(' AND '$where):"";
$conn db_connect();
$query_r " SELECT id_relacion FROM relaciones $where";    

$result_r = @$conn->query($query_r);
$num_rows_r $result_r->num_rows;            

if(
$num_rows_r) {

  
$res_query = array();
  
$results $result_r->fetch_assoc();
  
// vamos a preparar el array
  
foreach($results as $k=>$v) {
      
$res_query[] = $v['id_relacion'];
  }

  
$query "SELECT * FROM productos 
                  WHERE MATCH (nombre_producto, texto_producto)      
                  AGAINST ('$frase' IN BOOLEAN MODE) 
                  AND id_relacion IN ("
.implode(",",$res_query).") 
                  ORDER BY $orden ASC"
;  
  
$final_result mysql_query($query);

  
/*
   *    sigue....
   */

  #15 (permalink)  
Antiguo 27/07/2009, 02:12
Avatar de Anastasiaphp  
Fecha de Ingreso: junio-2006
Ubicación: El patio de mi casa
Mensajes: 196
Antigüedad: 17 años, 10 meses
Puntos: 3
Respuesta: Registros ordenados alfabéticamente usando datos de distintas tablas

Cita:
Iniciado por abidibo Ver Mensaje
Eso no, porque lleno el array $where, i luego hago el implode entonces no hace falta poner un if o otra cosa...
Tienes razón, no era necesario.

He probado con lo nuevo pero no me funciona

Me mezcla los datos y no saca los productos que debe, pongo el código hasta ahora con lo nuevo:


Código PHP:
    if($id_categoria or $id_marca){
                    
    
// 1) Buscamos el id_relacion
            
        
$where = array(); 
        if(
$id_categoria$where[] = "id_categoria=$id_categoria"
        if(
$id_marca$where[] = "id_marca=$id_marca"
        
$where_string = (count($where)>0)? "WHERE ".implode(' AND '$where):""
        
        
$conn db_connect(); 
        
$query_r " SELECT id_relacion FROM relaciones $where_string";     
        
        
$result_r = @$conn->query($query_r); 
        
$num_rows_r $result_r->num_rows;             

        echo 
"Relaciones encontradas: ";
        echo 
$num_rows_r;
        echo 
"<br />";


    
// 2) Buscamos la marca, sección, categoria y productos
    
        
if($num_rows_r){
                  
$res_query = array();
                  
$results $result_r->fetch_assoc();
                
// vamos a preparar el array
                
foreach($results as $k=>$v) {
                
$res_query[] = $v['id_relacion'];
                  }
        
                        
$query_producto =
                        
"
                        SELECT *
                        FROM productos
                        WHERE id_relacion IN ("
.implode(",",$res_query).")
                        ORDER BY $orden ASC
                        "
;
            
                    
$result_producto=@$conn->query($query_producto);
                    
$num_rows $result_producto->num_rows;
                    
                    
// 2.1) Extraigo la sección y categoría a la que pertenecen los productos
                    
                    
if ($num_rows!=0){
                    
                        
$id_relacion $v['id_relacion'];
                        
                        
$conn db_connect(); 
                        
$query_mc =
                        
"
                        SELECT *
                        FROM marcas, categorias, relaciones, secciones
                        WHERE secciones.id_seccion=$id_seccion
                        AND relaciones.id_relacion=$id_relacion
                        AND relaciones.id_marca=marcas.id_marca
                        AND relaciones.id_categoria=categorias.id_categoria
                        "
;
                        
                        
$result_mc = @$conn->query($query_mc);
                        
$row_mc $result_mc->fetch_assoc();
                                
                    }    
                    
            
                    
// 2.2) Extraigo los datos de los productos
    
                    
while($row_producto=$result_producto->fetch_assoc())
                        {
                        
/*DATOS DE LOS PRODUCTOS*/            
                        
}
                                        
    
        }
        
            else{
            echo 
"<br />No se han encontrado productos<br />";
            }
    
    } 

icarocu: no entiendo muy bien lo que propones, creo que no es lo que necesito, gracias.
  #16 (permalink)  
Antiguo 27/07/2009, 02:17
Avatar de abidibo  
Fecha de Ingreso: mayo-2009
Mensajes: 121
Antigüedad: 14 años, 10 meses
Puntos: 7
Respuesta: Registros ordenados alfabéticamente usando datos de distintas tablas

Haz un var_dump de $res_query, y mira si lo que obtienes es el array que contiene los id_realciones exactos, o sea los que deben resultar de la primera query
  #17 (permalink)  
Antiguo 27/07/2009, 02:31
Avatar de Anastasiaphp  
Fecha de Ingreso: junio-2006
Ubicación: El patio de mi casa
Mensajes: 196
Antigüedad: 17 años, 10 meses
Puntos: 3
Respuesta: Registros ordenados alfabéticamente usando datos de distintas tablas

El resultado no sale correcto, solo me encuentra un id_relacion que ni siquiera debería ser:
array(1) { [0]=> string(1) "2" }

Y los id_relacion que deberían ser con la búsqueda que he hecho son:
25, 26, 28, 29, 30, 32, 36, 37 y 220

Una cosa: La primera query de todas, $query_r si obtiene los datos correctos, ya que me dice que ha encontrado 9 id_relacion
  #18 (permalink)  
Antiguo 27/07/2009, 02:33
Avatar de abidibo  
Fecha de Ingreso: mayo-2009
Mensajes: 121
Antigüedad: 14 años, 10 meses
Puntos: 7
Respuesta: Registros ordenados alfabéticamente usando datos de distintas tablas

Ok, ahora hacemos dos cosas:
var_dump de la variable $results y un echo de la primera query...
  #19 (permalink)  
Antiguo 27/07/2009, 02:37
Avatar de Anastasiaphp  
Fecha de Ingreso: junio-2006
Ubicación: El patio de mi casa
Mensajes: 196
Antigüedad: 17 años, 10 meses
Puntos: 3
Respuesta: Registros ordenados alfabéticamente usando datos de distintas tablas

El echo de la primera QUERY:
SELECT id_relacion FROM relaciones WHERE id_categoria=4

(es correcto)

El var_dump de $results:
array(1) { ["id_relacion"]=> string(2) "25" }
  #20 (permalink)  
Antiguo 27/07/2009, 02:40
Avatar de abidibo  
Fecha de Ingreso: mayo-2009
Mensajes: 121
Antigüedad: 14 años, 10 meses
Puntos: 7
Respuesta: Registros ordenados alfabéticamente usando datos de distintas tablas

Aun una cosa: el var_dump de la variable $result_r...
  #21 (permalink)  
Antiguo 27/07/2009, 02:44
Avatar de Anastasiaphp  
Fecha de Ingreso: junio-2006
Ubicación: El patio de mi casa
Mensajes: 196
Antigüedad: 17 años, 10 meses
Puntos: 3
Respuesta: Registros ordenados alfabéticamente usando datos de distintas tablas

Me da:
object(mysqli_result)#2 (0) { }
  #22 (permalink)  
Antiguo 27/07/2009, 02:54
Avatar de abidibo  
Fecha de Ingreso: mayo-2009
Mensajes: 121
Antigüedad: 14 años, 10 meses
Puntos: 7
Respuesta: Registros ordenados alfabéticamente usando datos de distintas tablas

A ver asì:
Código PHP:
$where = array();
if(
$id_categoria$where[] = "id_categoria=$id_categoria";
if(
$id_marca$where[] = "id_marca=$id_marca";
$where_string = (count($where)>0)? "WHERE ".implode(' AND '$where):"";
$conn db_connect();
$query_r " SELECT id_relacion FROM relaciones $where";    

$result_r = @$conn->query($query_r);
$num_rows_r $result_r->num_rows;            

if(
$num_rows_r) {

  
$res_query = array();
  
$results $result_r->fetch_assoc();
  
// vamos a preparar el array
  
while($row $result_r->fetch_assoc()) {
      
$res_query[] = $row['id_relacion'];
  }

  
$query "SELECT * FROM productos 
                  WHERE MATCH (nombre_producto, texto_producto)      
                  AGAINST ('$frase' IN BOOLEAN MODE) 
                  AND id_relacion IN ("
.implode(",",$res_query).") 
                  ORDER BY $orden ASC"
;  
  
$final_result mysql_query($query);

  
/*
   *    sigue....
   */

  #23 (permalink)  
Antiguo 27/07/2009, 03:04
Avatar de Anastasiaphp  
Fecha de Ingreso: junio-2006
Ubicación: El patio de mi casa
Mensajes: 196
Antigüedad: 17 años, 10 meses
Puntos: 3
Respuesta: Registros ordenados alfabéticamente usando datos de distintas tablas

Se me queda la mitad de la pantalla en blanco
  #24 (permalink)  
Antiguo 27/07/2009, 03:11
Avatar de abidibo  
Fecha de Ingreso: mayo-2009
Mensajes: 121
Antigüedad: 14 años, 10 meses
Puntos: 7
Respuesta: Registros ordenados alfabéticamente usando datos de distintas tablas

ahiiiiiiii, otra vez el var_dump de $res_query..
  #25 (permalink)  
Antiguo 27/07/2009, 03:26
Avatar de Anastasiaphp  
Fecha de Ingreso: junio-2006
Ubicación: El patio de mi casa
Mensajes: 196
Antigüedad: 17 años, 10 meses
Puntos: 3
Respuesta: Registros ordenados alfabéticamente usando datos de distintas tablas

El var_dump de $res_query:
array(8) { [0]=> string(2) "26" [1]=> string(2) "28" [2]=> string(2) "29" [3]=> string(2) "30" [4]=> string(2) "32" [5]=> string(2) "36" [6]=> string(2) "37" [7]=> string(3) "220" }

Y después de esto, la página en blaco...

Ojo! Si te fijas salen bien todos los datos excepto que se ha comido el primero... creo que es por tener $results = $result_r->fetch_assoc(); antes del bucle.
  #26 (permalink)  
Antiguo 27/07/2009, 03:29
Avatar de abidibo  
Fecha de Ingreso: mayo-2009
Mensajes: 121
Antigüedad: 14 años, 10 meses
Puntos: 7
Respuesta: Registros ordenados alfabéticamente usando datos de distintas tablas

Cita:
creo que es por tener $results = $result_r->fetch_assoc(); antes del bucle
exactamente!
casi estamos..
Habrà un error de sintax, pon todo el codigo...
  #27 (permalink)  
Antiguo 27/07/2009, 03:35
Avatar de Anastasiaphp  
Fecha de Ingreso: junio-2006
Ubicación: El patio de mi casa
Mensajes: 196
Antigüedad: 17 años, 10 meses
Puntos: 3
Respuesta: Registros ordenados alfabéticamente usando datos de distintas tablas

Allá va:

Código PHP:
    if($id_categoria or $id_marca){
                    
    
// 1) Buscamos id_relacion
            
        
$where = array(); 
        if(
$id_categoria$where[] = "id_categoria=$id_categoria"
        if(
$id_marca$where[] = "id_marca=$id_marca"
        
$where_string = (count($where)>0)? "WHERE ".implode(' AND '$where):""
        
        
$conn db_connect(); 
        
$query_r " SELECT id_relacion FROM relaciones $where_string";     
        
        
$result_r = @$conn->query($query_r); 
        
$num_rows_r $result_r->num_rows;             

        echo 
"Relaciones encontradas: ";
        echo 
$num_rows_r;
        echo 
"<br />";

    
// 2) Buscamos la marca, sección, categoria y productos
    
        
if($num_rows_r){
                  
$res_query = array();
                while(
$row $result_r->fetch_assoc()) {
                        
$res_query[] = $row['id_relacion'];
                  }
        
                        
$query_producto =
                        
"
                        SELECT *
                        FROM productos
                        WHERE id_relacion IN ("
.implode(",",$res_query).")
                        ORDER BY $orden ASC
                        "
;
            
                    
$result_producto=@$conn->query($query_producto);
                    
$num_rows $result_producto->num_rows;
                    
// 2.1) Extraigo la sección y categoría a la que pertenecen los productos
                    
                    
if ($num_rows!=0){
                    
                        
$id_relacion $v['id_relacion'];
                        
                        
$conn db_connect(); 
                        
$query_mc =
                        
"
                        SELECT *
                        FROM marcas, categorias, relaciones, secciones
                        WHERE secciones.id_seccion=$id_seccion
                        AND relaciones.id_relacion=$id_relacion
                        AND relaciones.id_marca=marcas.id_marca
                        AND relaciones.id_categoria=categorias.id_categoria
                        "
;
                        
                        
$result_mc = @$conn->query($query_mc);
                        
$row_mc $result_mc->fetch_assoc();
                                
                    }    
                    
            
                    
// 2.2) Extraigo los datos de los productos
    
                    
while($row_producto=$result_producto->fetch_assoc())
                        {
    
                    
/*DATOS PRODUCTOS*/                                    
                        
}
                                        
    
        }
        
            else{
            echo 
"<br />No se han encontrado productos<br />";
            }
    
    } 
  #28 (permalink)  
Antiguo 27/07/2009, 03:37
Avatar de Anastasiaphp  
Fecha de Ingreso: junio-2006
Ubicación: El patio de mi casa
Mensajes: 196
Antigüedad: 17 años, 10 meses
Puntos: 3
Respuesta: Registros ordenados alfabéticamente usando datos de distintas tablas

Ah! Es que he dejado por ahí un resto de $v, espera que lo corrijo y lo pruebo...
  #29 (permalink)  
Antiguo 27/07/2009, 03:40
Avatar de abidibo  
Fecha de Ingreso: mayo-2009
Mensajes: 121
Antigüedad: 14 años, 10 meses
Puntos: 7
Respuesta: Registros ordenados alfabéticamente usando datos de distintas tablas

mmmm me parece bien...
hacemos un echo de $query_producto y un va_dump de $num_row para ver si la query esta bien y obtiene resultados...
  #30 (permalink)  
Antiguo 27/07/2009, 03:44
Avatar de Anastasiaphp  
Fecha de Ingreso: junio-2006
Ubicación: El patio de mi casa
Mensajes: 196
Antigüedad: 17 años, 10 meses
Puntos: 3
Respuesta: Registros ordenados alfabéticamente usando datos de distintas tablas

Tampoco :(

He corregido $id_relacion = $row['id_relacion']; pero sigue quedándose en blaco la mitad de la página... el problema está aquí, porque si elimino toda la parte de if ($num_rows!=0){ } funciona. Así que estoy extrayendo mal el dato $id_relacion...

Espera que no he visto tu mensaje anterior, ahora lo hago...
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 01:07.