Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema con Orden de consulta

Estas en el tema de Problema con Orden de consulta en el foro de PHP en Foros del Web. Hola chicos, bueno tengo este script que lo que me hace es relacionar un producto con su categoria padre y me muestra todos en una ...

  #1 (permalink)  
Antiguo 27/03/2014, 06:35
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 14 años, 10 meses
Puntos: 2
Sonrisa Problema con Orden de consulta

Hola chicos, bueno tengo este script que lo que me hace es relacionar un producto con su categoria padre y me muestra todos en una misma página. Ejemplo:

Ropa:
-Jeans
-Remeras
Calzado
-Zapatillas
Sombreros
-Gorra

Asi el script es este el problema es que creé un campo orden para ordenar los productos a gusto por numero. Por ejemplo si quiero que dentro de Ropa, remeras vaya antes de Jeans pero no hay forma que me lo ordene y sospecho que es porque toma el orden general de todos los productos, no de cada uno separado por su categoría.

Aquí el Querry de la llamada:

Código PHP:
Ver original
  1. $query = mysql_query("SELECT C.*, GROUP_CONCAT(P.nombre) AS name, GROUP_CONCAT(P.imagen) AS img, GROUP_CONCAT(P.producto_id) AS id FROM categorias C INNER JOIN productos P ON C.categoria_id = P.categoria_padre GROUP BY C.categoria_id ORDER BY C.categoria_id ASC, P.orden ASC");
  #2 (permalink)  
Antiguo 27/03/2014, 07:10
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con Orden de consulta

Problema de SQL, no de PHP:
Código SQL:
Ver original
  1. SELECT *
  2. FROM
  3.     (SELECT C.*,
  4.         GROUP_CONCAT(P.nombre) `NAME`,
  5.         GROUP_CONCAT(P.imagen) img,
  6.         GROUP_CONCAT(P.producto_id) id
  7.     FROM categorias C
  8.         INNER JOIN productos P ON C.categoria_id = P.categoria_padre
  9.     ORDER BY C.categoria_id ASC, P.orden ASC) T1
  10. GROUP BY C.categoria_id ;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 28/03/2014, 05:21
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Problema con Orden de consulta

a ver si funciona ese... porque pusiste NAME en rojo?
  #4 (permalink)  
Antiguo 28/03/2014, 05:26
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Problema con Orden de consulta

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in

Intento esto y tampoco agarra:

Código PHP:
Ver original
  1. $query = mysql_query
  2. ("SELECT * FROM (SELECT C.*, GROUP_CONCAT(P.nombre) AS name, GROUP_CONCAT(P.imagen) AS img, GROUP_CONCAT(P.producto_id) AS id FROM categorias C INNER JOIN productos P ON C.categoria_id = P.categoria_padre ORDER BY C.categoria_id ASC, P.orden ASC) T1 GROUP BY C.categoria_id");

Última edición por rakshaka; 28/03/2014 a las 05:40
  #5 (permalink)  
Antiguo 28/03/2014, 06:05
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con Orden de consulta

Cita:
Iniciado por rakshaka Ver Mensaje
a ver si funciona ese... porque pusiste NAME en rojo?
No lo puse yo. Se resalta solo por el etiquetado del código.
Por lo demás, sólo copié lo que estabas intentando poner, sólo que le puse acentos agudos (`), como manda MySQL obligatoriamente cuando usas palabras reservadas por nombres de objetos en base.
Nota: Nunca uses como nombres palabras simples de inglés. Terminarás usando palabras reservadas de MySQL, lo que generarán errores sintácticos indetectables.

Consejos:
- No generes la query en la misma llamada a la baje. Usa una variable, de modo que luego puedas verificar con un simple echo, si la sintaxis es correcta.
- Costruye las consultas de una forma estructurada, de modo de poder verla más facilmente.
- No uses "*" en las consultas, en especial cuando usas JOINs, ya que puedes duplicar las columnas con idéntico nombre de diferentes tablas y eso generar errores. Invoca específicamente las columnas que vas a usar, y nada más que esas.
Código PHP:
Ver original
  1. $qry = "SELECT *
  2. FROM  (SELECT
  3.      C.*,
  4.      GROUP_CONCAT(P.nombre) nombres,
  5.      GROUP_CONCAT(P.imagen) img,
  6.      GROUP_CONCAT(P.producto_id) idProductos
  7.      FROM categorias C INNER JOIN productos P ON C.categoria_id = P.categoria_padre
  8.      ORDER BY C.categoria_id ASC, P.orden ASC) T1
  9. GROUP BY categoria_id";
  10. echo $qry;
  11.  
  12. $result = mysql_query($qry);

Nota 2: No es necesario poner el AS para los alias. Es obsoleto desde hace años, irrelevante y sólo agrega problemas para leer.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 28/03/2014, 06:16
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Problema con Orden de consulta

Muy buena explicación.

El código aun no anda... Usé este:

Código PHP:
Ver original
  1. $qry = "SELECT *
  2.    FROM  (SELECT
  3.         C.*,
  4.         GROUP_CONCAT(P.nombre) nombres,
  5.         GROUP_CONCAT(P.imagen) img,
  6.         GROUP_CONCAT(P.producto_id) idProductos
  7.         FROM categorias C INNER JOIN productos P ON C.categoria_id = P.categoria_padre
  8.         ORDER BY C.categoria_id ASC, P.orden ASC) T1
  9.    GROUP BY categoria_id";
  10.      
  11.     $query = mysql_query($qry);

E igual, ahora solo me muestra un producto dentro de una categoria. No me muestra como antes los productos en sus categorias. Debo aclarar que necesito mostrarlos todos en una sola pagina.
  #7 (permalink)  
Antiguo 28/03/2014, 06:22
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Problema con Orden de consulta

El error era mio... no había cambiado parte del codigo luego que cambiaste los nombres

Ahora se ven el problema es que se ven solo en una categoria. Todas en la misma. No me los separa por categoria.

Pongo el codigo completo:

Código PHP:
Ver original
  1. <?php
  2.     $qry = "SELECT *
  3.    FROM  (SELECT
  4.         C.*,
  5.         GROUP_CONCAT(P.nombre) nombres,
  6.         GROUP_CONCAT(P.imagen) img,
  7.         GROUP_CONCAT(P.producto_id) idProductos
  8.         FROM categorias C INNER JOIN productos P ON C.categoria_id = P.categoria_padre
  9.         ORDER BY C.categoria_id ASC, P.orden ASC) T1
  10.    GROUP BY categoria_id";
  11.      
  12.     $query = mysql_query($qry);
  13.     if (mysql_num_rows($query)){
  14.         $catactual = NULL;
  15.         while ($row = mysql_fetch_array($query)){
  16.             if ($catactual != $row["categoria_id"]){
  17.                 $catactual = $row["categoria_id"];
  18.     ?>
  19.                 <div class = "recent-projects">
  20.                     <h4 class="title">
  21.                         <span>
  22.                             <?php echo $row["categoria_nombre"]?>
  23.                         </span>
  24.                     </h4>
  25.                     <div class = "projects-carousel touch-carousel">
  26.     <?php
  27.                         $nombres = explode(",", $row["nombres"]);
  28.                         $imagenes = explode(",", $row["img"]);
  29.                         $id = explode(",", $row["idProductos"]);
  30.                         for ($i = 0, $limite = count($nombres); $i < $limite; $i++){
  31.     ?>            
  32.                             <div class = "portfolio-item item">
  33.                                 <div class = "portfolio-border">
  34.                                     <div class = "portfolio-thumb">
  35.                                         <a href = "producto.php?producto_id=<?php echo $id[$i]; ?>">
  36.                                             <div class="thumb-overlay">
  37.                                                 <i class="icon-feather"></i>
  38.                         </div>
  39.                                             <img src="http://www.forosdelweb.com/f18/productos/<?php echo $imagenes[$i]; ?>" />
  40.                                         </a>
  41.                                     </div>
  42.                                     <div class="portfolio-details">
  43.                                         <a href = "producto.php?producto_id=<?php echo $id[$i]; ?>">
  44.                                             <h4><?php echo $nombres[$i]?></h4></a>
  45.                                     </div>
  46.                                     <a href="borrar-producto.php?producto_id=<?php echo $id[$i]; ?>" class="like-link"  onclick="javascript:return confirm('¿Desea borrar ésta Categoría? NO VOLVERA A APARECER...')"><i class="icon-attention-2"></i><span>BORRAR</span></a>
  47.                                 </div>
  48.                             </div>
  49.     <?php
  50.                         }
  51.     ?>                  
  52.                     </div>
  53.                 </div>
  54.                 <div class="hr1" style="margin-bottom:40px;"></div>
  55.     <?php
  56.             }
  57.         }
  58.     }
  59.     ?>
  #8 (permalink)  
Antiguo 28/03/2014, 06:45
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Problema con Orden de consulta

Acá

ahi esta el ejemplo de como debe quedar lo que quiero es que ademas, el cliente lo pueda ordenar los productos como entenderas.
  #9 (permalink)  
Antiguo 28/03/2014, 06:45
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con Orden de consulta

Cita:
Iniciado por rakshaka Ver Mensaje
Ahora se ven el problema es que se ven solo en una categoria. Todas en la misma. No me los separa por categoria.
Eso suena a error de datos. Siin ver los datos de las tablas es difícil hace un diagnóstico correcto.
En principio, al agrupar por categoria_id, debería devolver un registro por cada categoria_id diferente que exista en la tabla CATEGORIAS, y por cada una de ellas, devolver los nombres de todos los productos (separados por comas), sus IDs, y las imagenes, también separados por comas.
La única forma en que pueda devolver un único registro es si todos los productos están asociados a una única categoría, o bien que el resto de los productos no estén asociados a ninguna categoría (columna Productos.categoria_padre nula o con valores inválidos)..
Podrías posterar un ejemplo de los datos contenidos en la tabla Productos?
Con algunos registros completos será suficiente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 28/03/2014, 06:47
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Problema con Orden de consulta

OK, pero estan asociados desde categoria_padre al categoria_id

Acá tenes la muestra con el codigo anterior

Así se ve con el codigo que me pasaste vos
  #11 (permalink)  
Antiguo 28/03/2014, 06:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con Orden de consulta

Creo que no me entendiste.
Lo que necesito son los registros que están en la tabla. Los datos puros, no su representación en la web.
Es allí donde radica el problema.
Ahora bien, si los datos están correctos, el problema es entonces el discriminante del GROUP BY, que podría ser otro.
A mi mucho no me cierra...
Pero sin ver datos...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 28/03/2014, 06:55
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Problema con Orden de consulta

OK, pero en la muestra que te paso veras que se ordenan por categorias pero con el script nuevo no.


Aca tenes la tabla productos
Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `productos` (
  2.   `producto_id` bigint(200) NOT NULL AUTO_INCREMENT,
  3.   `nombre` varchar(255) DEFAULT NULL,
  4.   `nombre_en` varchar(200) DEFAULT NULL,
  5.   `descripcion` text,
  6.   `descripcion_en` text,
  7.   `imagen` varchar(200) DEFAULT NULL,
  8.   `categoria_padre` int(200) NOT NULL,
  9.   `orden` varchar(10) NOT NULL,
  10.   PRIMARY KEY (`producto_id`)
  11. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=26 ;
  12.  
  13. --
  14. -- Volcado de datos para la tabla `productos`
  15. --
  16.  
  17. INSERT INTO `productos` (`producto_id`, `nombre`, `nombre_en`, `descripcion`, `descripcion_en`, `imagen`, `categoria_padre`, `orden`) VALUES
  18. (2, 'Valvulas esféricas; Globo y otras; Manuales y Actuadas', NULL, 'asd', '552737Foto2.jpg', 2, ''),
  19. (7, 'Caños Y Accesorios de PPV', NULL, 'asd', NULL, '4722761.2.jpg', 1, ''),
  20. (8, 'Roscado De CaÑOs: Niples Y Puntas De Rosca', NULL, 'asd', NULL, '6539560150.jpg', 1, ''),
  21. (9, 'Accesorios De Acero Para Soldar', NULL, 'asd', NULL, '8693971.4.jpg', 1, '');

Acá categorias:

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `categorias` (
  2.   `categoria_id` bigint(200) NOT NULL AUTO_INCREMENT,
  3.   `categoria_nombre` varchar(200) NOT NULL,
  4.   `categoria_nombre_en` varchar(200) NOT NULL,
  5.   PRIMARY KEY (`categoria_id`)
  6. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
  7.  
  8. --
  9. -- Volcado de datos para la tabla `categorias`
  10. --
  11.  
  12. INSERT INTO `categorias` (`categoria_id`, `categoria_nombre`, `categoria_nombre_en`) VALUES
  13. (1, 'CAÑOS Y ACCESORIOS', 'CAÑOS Y ACCESORIOS PARA AIRE, AGUA, VAPOR Y OTROS FLUIDOS'),
  14. (2, 'AIRE COMPRIMIDO', 'AIRE COMPRIMIDO Y AUTOMATIZACION NEUMATICA'),
  15. (3, 'VAPOR', 'VAPOR'),
  16. (4, 'AGUA Y OTROS FLUIDOS', ''),
  17. (5, 'REFRIGERACION', ''),
  18. (6, 'GAS NATURAL Y GLP', '');


Supongo eso querias vver. Solo puse unos registros en productos.
  #13 (permalink)  
Antiguo 28/03/2014, 07:13
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Problema con Orden de consulta

Igual en los dos ejemplos que te armé demuestra que debe haber algo mal en el código, no creo que sea la DB
  #14 (permalink)  
Antiguo 28/03/2014, 07:35
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con Orden de consulta

Vovlamos a lo básico:
Código MySQL:
Ver original
  1.    C.*,
  2.    GROUP_CONCAT(P.nombre) nombres,
  3.    GROUP_CONCAT(P.imagen) img,
  4.    GROUP_CONCAT(P.producto_id) idProductos
  5. FROM categorias C INNER JOIN productos P ON C.categoria_id = P.categoria_padre
  6. GROUP BY categoria_id ASC
  7. ORDER BY C.categoria_id ASC, P.orden ASC
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 28/03/2014, 07:51
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Problema con Orden de consulta

a ver ahi.-... ya te digo.

Bien, ahora los ordena pero solo muestra un producto por categoria :(
  #16 (permalink)  
Antiguo 28/03/2014, 08:00
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Problema con Orden de consulta

Ahi arreglé un poco el código y ahora si se ve bien pero el orden sigue estando mal, osea, no me toma por orden el P.orden ASC

NO PUEDE SER TAN DIFICIIIIIIIIIIIIIIIIIL!
  #17 (permalink)  
Antiguo 28/03/2014, 08:19
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con Orden de consulta

Cita:
NO PUEDE SER TAN DIFICIIIIIIIIIIIIIIIIIL!


¿Por qué no?
En BBDD las cosas que para los usuarios son pequeñeces, representan muchas veces cosas complejas, por las características del lenguaje de consutlas...

Que no te extrañe.

Ahora no peudo retomar el tema, porque estoy en horario de trabajo, pero luego veo de tratar de resolver la query.
Aunque desde ya que no va a ser una simple y sencilla...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #18 (permalink)  
Antiguo 28/03/2014, 08:29
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Problema con Orden de consulta

huuuuu ok, si me ayudas te lo voy a agradecer muchísimo...
  #19 (permalink)  
Antiguo 31/03/2014, 09:32
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Problema con Orden de consulta

Aun no puedo solucionar este problema :(
  #20 (permalink)  
Antiguo 31/03/2014, 10:43
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Problema con Orden de consulta

gnzsoloyo avísame si puedes verlo :( no doy con el código :(
  #21 (permalink)  
Antiguo 31/03/2014, 11:33
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con Orden de consulta

Cita:
Iniciado por rakshaka Ver Mensaje
Ahi arreglé un poco el código y ahora si se ve bien pero el orden sigue estando mal, osea, no me toma por orden el P.orden ASC

NO PUEDE SER TAN DIFICIIIIIIIIIIIIIIIIIL!
Vamos al punto: No puede mostrarte ese orden, porque en el INSERT de esos conceptos no lo incluyes:
Código MySQL:
Ver original
  1. mysql> INSERT INTO `productos` (`producto_id`, `nombre`, `nombre_en`, `descripcion`, `descripcion_en`, `imagen`, `categoria_padre`, `orden`) VALUES
  2.     -> (2, 'Valvulas esféricas; Globo y otras; Manuales y Actuadas', NULL, 'asd',NULL, '552737Foto2.jpg', 2, ''),
  3.     -> (7, 'Caños Y Accesorios de PPV', NULL, 'asd', NULL, '4722761.2.jpg', 1, ''),
  4.     -> (8, 'Roscado De Caños: Niples Y Puntas De Rosca', NULL, 'asd', NULL, '6539560150.jpg', 1, ''),
  5.     -> (9, 'Accesorios De Acero Para Soldar', NULL, 'asd', NULL, '8693971.4.jpg', 1, '');
Como puedes ver, el campo orden, el último, no lo estás insertando en estos datos de prueba.
En todo caso puede ser un error al momento de crear tus datos, pero no es un error de MySQL.
Distinto sería si le pones datos:
Código SQL:
Ver original
  1. INSERT INTO `productos` (`producto_id`, `nombre`, `nombre_en`, `descripcion`, `descripcion_en`, `imagen`, `categoria_padre`, `orden`)
  2. VALUES
  3. (2, 'Valvulas esféricas; Globo y otras; Manuales y Actuadas', NULL, 'asd',NULL, '552737Foto2.jpg', 2, 3),
  4. (7, 'Caños Y Accesorios de PPV', NULL, 'asd', NULL, '4722761.2.jpg', 1, 4),
  5. (8, 'Roscado De Caños: Niples Y Puntas De Rosca', NULL, 'asd', NULL, '6539560150.jpg', 1, 1),
  6. (9, 'Accesorios De Acero Para Soldar', NULL, 'asd', NULL, '8693971.4.jpg', 1, 2);
Y además si cambias la forma de ordenarlo:
Código MySQL:
Ver original
  1.     C . *,
  2.     GROUP_CONCAT(P.nombre) nombres,
  3.     GROUP_CONCAT(P.imagen) img,
  4.     GROUP_CONCAT(P.producto_id) idProductos
  5.     categorias C
  6.         INNER JOIN
  7.     productos P ON C.categoria_id = P.categoria_padre
  8. GROUP BY categoria_id ASC
  9. ORDER BY P.orden ASC, C.categoria_id ASC;
o bien:
Código MySQL:
Ver original
  1.     C . *,
  2.     GROUP_CONCAT(P.nombre) nombres,
  3.     GROUP_CONCAT(P.imagen) img,
  4.     GROUP_CONCAT(P.producto_id) idProductos
  5.     categorias C
  6.         INNER JOIN
  7.     productos P ON C.categoria_id = P.categoria_padre
  8. GROUP BY categoria_id ASC
  9. ORDER BY P.orden DESC, C.categoria_id ASC;

Por cierto, la query a mi me devuelve al menos dos registros, pero si quieres todo:

Código MySQL:
Ver original
  1.     C . *,
  2.     IFNULL(GROUP_CONCAT(P.nombre), '') nombres,
  3.     IFNULL(GROUP_CONCAT(P.imagen), '')  img,
  4.     IFNULL(GROUP_CONCAT(P.producto_id), '')  idProductos
  5.     categorias C
  6.         LEFT JOIN
  7.     productos P ON C.categoria_id = P.categoria_padre
  8. WHERE TRUE OR P.categoria_padre IS NULL
  9. GROUP BY categoria_id ASC
  10. ORDER BY P.orden DESC, C.categoria_id ASC;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #22 (permalink)  
Antiguo 31/03/2014, 16:05
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Problema con Orden de consulta

Ya lo pruebo, eres un genio
  #23 (permalink)  
Antiguo 01/04/2014, 07:18
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Problema con Orden de consulta

No, no me los ordena :( imposible...

Dependiendo lo que uso me cambia o el orden de la categoría o el orden del producto dentro.

El tema del orden como NULL no va a ser Null ya le puse a todos un número pero su uso esto:

Código MySQL:
Ver original
  1.         C . *,
  2.         GROUP_CONCAT(P.nombre) nombres,
  3.         GROUP_CONCAT(P.imagen) img,
  4.         GROUP_CONCAT(P.producto_id) idProductos
  5.     FROM
  6.         categorias C
  7.             INNER JOIN
  8.         productos P ON C.categoria_id = P.categoria_padre
  9.     GROUP BY categoria_id ASC
  10.     ORDER BY P.orden ASC, C.categoria_id ASC;

Me desordena las categorias que estan ordenadas por categoria_id en ASC aunque los sigue agrupando bien y respeta el orden.

Entonces cambio a
Código MySQL:
Ver original
  1.         C . *,
  2.         GROUP_CONCAT(P.nombre) nombres,
  3.         GROUP_CONCAT(P.imagen) img,
  4.         GROUP_CONCAT(P.producto_id) idProductos
  5.     FROM
  6.         categorias C
  7.             INNER JOIN
  8.         productos P ON C.categoria_id = P.categoria_padre
  9.     GROUP BY categoria_id ASC
  10.     ORDER BY C.categoria_id ASC, P.orden ASC;

Y entonces me los ordena por categoría pero no por orden.
Estoy seguro de que no logra entender que dentro de cada categoría debe ordenar los productos independientemente del resto de los productos.

El codigo que levanta y ordena es este:

Código PHP:
Ver original
  1. <?php
  2.     $qry = "SELECT
  3.        C . *,
  4.        GROUP_CONCAT(P.nombre) nombres,
  5.        GROUP_CONCAT(P.imagen) img,
  6.        GROUP_CONCAT(P.producto_id) idProductos
  7.    FROM
  8.        categorias C
  9.            INNER JOIN
  10.        productos P ON C.categoria_id = P.categoria_padre
  11.    GROUP BY categoria_id ASC
  12.    ORDER BY P.orden ASC, C.categoria_id ASC;";
  13.     //$qry = "SELECT * FROM  (SELECT C.*, GROUP_CONCAT(P.nombre) nombres, GROUP_CONCAT(P.imagen) img, GROUP_CONCAT(P.producto_id) idProductos FROM categorias C INNER JOIN productos P ON C.categoria_id = P.categoria_padre ORDER BY C.categoria_id ASC, P.orden ASC) T1 GROUP BY categoria_id"; $query = mysql_query($qry);
  14.     $query = mysql_query($qry);
  15.     if (mysql_num_rows($query)){
  16.         $catactual = NULL;
  17.         while ($row = mysql_fetch_array($query)){
  18.             if ($catactual != $row["categoria_id"]){
  19.                 $catactual = $row["categoria_id"];
  20.     ?>
  21.                 <div class = "recent-projects">
  22.                     <h4 class="title">
  23.                         <span>
  24.                             <?php echo $row["categoria_nombre"]?>
  25.                         </span>
  26.                     </h4>
  27.                     <div class = "projects-carousel touch-carousel">
  28.     <?php
  29.                         $nombres = explode(",", $row["nombres"]);
  30.                         $imagenes = explode(",", $row["img"]);
  31.                         $id = explode(",", $row["idProductos"]);
  32.                         for ($i = 0, $limite = count($nombres); $i < $limite; $i++){
  33.     ?>            
  34.                             <div class = "portfolio-item item">
  35.                                 <div class = "portfolio-border">
  36.                                     <div class = "portfolio-thumb">
  37.                                         <a href = "producto.php?producto_id=<?php echo $id[$i]; ?>">
  38.                                             <div class="thumb-overlay">
  39.                                                 <i class="icon-feather"></i>
  40.                         </div>
  41.                                             <img src="http://www.forosdelweb.com/f18/productos/<?php echo $imagenes[$i]; ?>" />
  42.                                         </a>
  43.                                     </div>
  44.                                     <div class="portfolio-details">
  45.                                         <a href = "producto.php?producto_id=<?php echo $id[$i]; ?>">
  46.                                             <h4><?php echo $nombres[$i]?></h4></a>
  47.                                     </div>
  48.                                     <a href="borrar-producto.php?producto_id=<?php echo $id[$i]; ?>" class="like-link"  onclick="javascript:return confirm('¿Desea borrar ésta Categoría? NO VOLVERA A APARECER...')"><i class="icon-attention-2"></i><span>BORRAR</span></a>
  49.                                 </div>
  50.                             </div>
  51.     <?php
  52.                         }
  53.     ?>                  
  54.                     </div>
  55.                 </div>
  56.                 <div class="hr1" style="margin-bottom:40px;"></div>
  57.     <?php
  58.             }
  59.         }
  60.     }
  61.     ?>
  #24 (permalink)  
Antiguo 01/04/2014, 07:32
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con Orden de consulta

Aclarame esto:
Cita:
Estoy seguro de que no logra entender que dentro de cada categoría debe ordenar los productos independientemente del resto de los productos.
¿Te refieres a ordenar los registros entre si, o los productos que quedan agrupados en ese mismo registro?
No es lo mismo.
ORDER BY en la query ordena únicamente registros, no contenido de un campo devuelto, ni siquiera por el GROUP_CONCAT(). Para que aplique un ordenamiento interno dentro del resultado de esa función, debe indicarse específicamente en la función:

Código MySQL:
Ver original
  1.         C . *,
  2.         GROUP_CONCAT(P.nombre ORDER BY P.orden ASC) nombres,
  3.         GROUP_CONCAT(P.imagen ORDER BY P.orden ASC) img,
  4.         GROUP_CONCAT(P.producto_id ORDER BY P.orden ASC) idProductos
  5.     FROM
  6.         categorias C
  7.             INNER JOIN
  8.         productos P ON C.categoria_id = P.categoria_padre
  9.     GROUP BY categoria_id ASC
  10.     ORDER BY C.categoria_id ASC;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #25 (permalink)  
Antiguo 01/04/2014, 07:36
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Problema con Orden de consulta

Ahora siiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii ese era el código! MIL GRACIAS!
  #26 (permalink)  
Antiguo 01/04/2014, 07:42
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con Orden de consulta



Me alegro que hayamos domado al potro...

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #27 (permalink)  
Antiguo 01/04/2014, 07:43
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Problema con Orden de consulta

Lo que no logro entender aun es porque me ordena uno de dos digitos antes... por ejemplo:

orden: 1, 12, 2, 21, 3, 34

Así... no entiendo porque me lo hace :(
  #28 (permalink)  
Antiguo 01/04/2014, 07:49
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Problema con Orden de consulta

Osea, me pone antes el numero por ejemplo 11 que el 2
  #29 (permalink)  
Antiguo 01/04/2014, 08:08
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Problema con Orden de consulta

Puede ser porque uso VARCHAR para el orden?
  #30 (permalink)  
Antiguo 01/04/2014, 08:15
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con Orden de consulta

Exacto...
Si un valor será numérico, jamás se deben usar VARCHAR.
Cada tipo de columna tiene su razón de ser, y no se deben seleccionar los tipos incorrectos.
Un caso muy habitual es el de poner una fecha como VARCHAR porque quieren que aparezca con un formato DD/MM/AAAA. Y es una metida de pata porque luego se ordenan mal, se consultan complicado, y desperdicias espacio de almacenamiento. Y para el formato existen funciones de salida.

Si el orden es numerico, usa, por ejemplo INT UNSIGNED (no existen ordenes negativos), u otro menor si no vas a tener rangos tan elevados (TINYINT puee ser suficiente).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: mysql, orden, select
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 00:20.