Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Agrupar resultados y ordenarlos

Estas en el tema de Agrupar resultados y ordenarlos en el foro de PHP en Foros del Web. Hola foreros, tengo un problema y es que quiero agrupar resultados y a la vez ordenarlos por precio. He probado con un order by de ...
  #1 (permalink)  
Antiguo 24/10/2015, 07:01
 
Fecha de Ingreso: diciembre-2006
Mensajes: 35
Antigüedad: 17 años, 4 meses
Puntos: 0
Agrupar resultados y ordenarlos

Hola foreros, tengo un problema y es que quiero agrupar resultados y a la vez ordenarlos por precio.

He probado con un order by de toda la vida pero al agruparlos me he dado cuenta que lo que hace el order es ordenar el precio en función del grupo es decir en cada grupo aparece el mas barato del grupo es decir, el grupo 1 digamos tiene 3 entradas con precios 30€,45€,16€ pues como resultado numero uno me aparecerá el producto que cuesta 16 € el grupo 2 tiene 3 entradas también con precios: 4€,8€ y 15 €, pues me va a aparecer el de 4 € como segundo resultado, el grupo 3 tiene 3 entradas con precios 189€,48€,58€ pues como tercer resultado aparecerá el producto de 48 €

esta es la consulta:
Código PHP:
SELECT from $url1 group by id_t order by precio asc 
Entonces de esta manera el resultado final quedara así:

producto 1: 16 €
producto 2: 4 €
producto 3: 48 €

como ven los precios no quedan ordenados por ahí me han dicho que pruebe haciendo una subconsulta pero ni idea de como hacerla me tiene días estancado agradecería mucho vuestra ayuda.
  #2 (permalink)  
Antiguo 24/10/2015, 09:24
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Agrupar resultados y ordenarlos

Saludo

Uhm, a ver.
Vamos a suponer que tengo estos datos.

Código HTML:
Ver original
  1. id id_t   nombre   precio
  2. 1     1     producto1     30
  3. 2     1     producto2     45
  4. 3     1     producto3     16
  5. 4     2     producto4     4
  6. 5     2     producto5     8
  7. 6     2     producto6     15
  8. 7     3     producto7     189
  9. 8     3     producto8     48
  10. 9     3     producto9     58

Uno tal vez esperaría que el resultado fuese

Código HTML:
Ver original
  1. id id_t nombre precio
  2. 4     2     producto4 4
  3. 3     1     producto3 16
  4. 8     3     producto8 48


Ahora, teniendo en cuenta el query propuesto:
Código SQL:
Ver original
  1. SELECT *
  2. FROM productos
  3. GROUP BY id_t
  4. ORDER BY precio ASC

A primera vista, uno diría, así es.
Sin embargo, sql tiene su forma de hacer las cosas
no tan explicitamente como nosotros quisieramos.

A detallar.
Primero hace el group by, obteniendo

Código HTML:
Ver original
  1. id id_t nombre precio
  2. 1     1     producto1     30
  3. 4     2     producto4     4
  4. 7     3     producto7     189


Y luego sí aplica el order

Código HTML:
Ver original
  1. id id_t   nombre   precio
  2. 4     2     producto4     4
  3. 1     1     producto1     30
  4. 7     3     producto7     189


Esto quiere decir que primero agrupo,
y luego a este grupo de datos le aplicó el order.


Para solventar esto, yo propongo traer el precio mínimo de un producto
de cada grupo obtenido, y ordenar por ese campo.

Código SQL:
Ver original
  1. SELECT *, MIN(precio) minimo
  2. FROM productos
  3. GROUP BY id_t
  4. ORDER BY minimo

Obteniendo esto

Código HTML:
Ver original
  1. id id_t nombre precio minimo
  2. 4     2     producto4 4         4
  3. 1     1     producto1 30       16
  4. 7     3     producto7 189     48


Aquí ya nos trajo bien los precios mínimos,
pero la información de los productos es el resultado del group by,
no la esperada.

Así el asunto, propongo este query:
Código SQL:
Ver original
  1. SELECT * FROM productos
  2. WHERE precio IN
  3. (
  4. SELECT MIN(precio) minimo
  5. FROM productos
  6. GROUP BY id_t
  7. ORDER BY minimo ASC
  8. )
  9. ORDER BY precio ASC

Obteniendo

Código HTML:
Ver original
  1. id id_t nombre precio
  2. 4     2     producto4 4
  3. 3     1     producto3 16
  4. 8     3     producto8 48


Sin embargo, quise hacer el mismo query por EXISTS y no obtengo
el mismo resultado, pero ya es más por cosa mía. Con el IN te basta a tí.

Finalmente, tal vez invocando a
gnzsoloyo ,
a él sí se le haga claro el camino para hacerlo por EXISTS.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #3 (permalink)  
Antiguo 24/10/2015, 10:33
 
Fecha de Ingreso: diciembre-2006
Mensajes: 35
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: Agrupar resultados y ordenarlos

Muchas gracias mortiprogramador, con tu ayuda ya funciona como quería solo que con un pequeño fallo, y es que si hay varios productos en el mismo grupo con el precio de 4 € (el mas bajo) también se imprimen en pantalla quedando así:

supongamos que tengo 4 productos en el mismo grupo con el mismo precio:

Código:
id id_t   nombre   precio 
4     2     producto4     4
2     2     producto8     4
3     2     producto2     4
8     2     producto6     4
1     1     producto1     30
7     3     producto7     189
debería obtener solo un producto de cada grupo pero en este caso obtengo el producto 4, 8, 2 y 6...

esto solo pasa si el precio repetido es el mas bajo del grupo.

Última edición por Matuha; 24/10/2015 a las 10:40
  #4 (permalink)  
Antiguo 24/10/2015, 10:44
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Agrupar resultados y ordenarlos

Saludo
Para eso, usa el GROUP BY
antes del ORDER BY en la consulta final.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #5 (permalink)  
Antiguo 24/10/2015, 11:29
 
Fecha de Ingreso: diciembre-2006
Mensajes: 35
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: Agrupar resultados y ordenarlos

Ahora si, funciona justo como necesitaba, mil gracias por tu tiempo
  #6 (permalink)  
Antiguo 24/10/2015, 17:56
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Agrupar resultados y ordenarlos

Saludo
Pues analizando el tema con EXISTS,
no veo más que usar un IN interno.

Código SQL:
Ver original
  1. SELECT a.*
  2. FROM productos a
  3. WHERE EXISTS
  4. (
  5. SELECT MIN(precio) minimo
  6. FROM productos
  7. WHERE a.precio IN
  8.     (
  9.     SELECT MIN(precio) minimo2
  10.     FROM productos
  11.     GROUP BY id_t
  12.     )
  13. GROUP BY id_t
  14. ORDER BY minimo ASC
  15. )
  16. GROUP BY id_t
  17. ORDER BY precio ASC

De otro modo, se haría una consulta gigantesca.
Código SQL:
Ver original
  1. SELECT a.*
  2.     FROM productos a
  3.     WHERE EXISTS
  4.     (
  5.     SELECT MIN(precio) minimo1
  6.     FROM productos
  7.     WHERE a.precio =
  8.         (
  9.         SELECT MIN(precio) minimo11
  10.         FROM productos
  11.         WHERE id_t = 1
  12.         )
  13.     GROUP BY id_t
  14.     ORDER BY minimo1 ASC
  15.     )
  16.     OR EXISTS
  17.     (
  18.     SELECT MIN(precio) minimo2
  19.     FROM productos
  20.     WHERE a.precio =
  21.         (
  22.         SELECT MIN(precio) minimo22
  23.         FROM productos
  24.         WHERE id_t = 2
  25.         )
  26.     GROUP BY id_t
  27.     ORDER BY minimo2 ASC
  28.     )
  29.     OR EXISTS
  30.     (
  31.     SELECT MIN(precio) minimo3
  32.     FROM productos
  33.     WHERE a.precio =
  34.         (
  35.         SELECT MIN(precio) minimo33
  36.         FROM productos
  37.         WHERE id_t = 3
  38.         )
  39.     GROUP BY id_t
  40.     ORDER BY minimo3 ASC
  41.     )
  42.     GROUP BY id_t
  43.     ORDER BY precio ASC

Y sí los id_t incrementan, tocaría manualmente modificar este query,
o hacer que se genere dinámicamente ya sea por la aplicación que
ejecutará el query, o a través de un store procedure.

Sin embargo, esperaré a lo que comente el joven invocado,
que en algún momento espero brinde su opinión al respecto.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Última edición por mortiprogramador; 24/10/2015 a las 18:02
  #7 (permalink)  
Antiguo 27/10/2015, 12:23
 
Fecha de Ingreso: diciembre-2006
Mensajes: 35
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: Agrupar resultados y ordenarlos

Y como se haría para mostrar primero los mas caros?

he probado de varias formas y me devuelve los resultados desordenados...

Código PHP:
SELECT FROM $url1 WHERE precio IN (SELECT MAX(preciomaximo FROM $url1 group by id_t ORDER BY maximo ASCgroup by id_t ORDER BY precio ASC 
Código PHP:
SELECT FROM $url1 WHERE precio IN (SELECT MAX(preciomaximo FROM $url1 group by id_t ORDER BY maximo DESCgroup by id_t ORDER BY precio DESC 
  #8 (permalink)  
Antiguo 27/10/2015, 13:29
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Agrupar resultados y ordenarlos

Saludo
Pues las dos consultas funcionan sin problema.

Teniendo en cuenta la misma tabla de la vez pasada,
el resultado es (Primera consulta)

Código HTML:
Ver original
  1. id id_t nombre precio
  2. 6     2     producto6 15
  3. 2     1     producto2 45
  4. 7     3     producto7 189

Y cambiando el order (Segunda consulta)

Código HTML:
Ver original
  1. id id_t nombre precio
  2. 7     3     producto7 189
  3. 2     1     producto2 45
  4. 6     2     producto6 15

Así que sí no funciona, habrá que detallar la información y lo que
se quiere lograr específicamente.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Última edición por mortiprogramador; 27/10/2015 a las 13:37
  #9 (permalink)  
Antiguo 27/10/2015, 15:08
 
Fecha de Ingreso: diciembre-2006
Mensajes: 35
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: Agrupar resultados y ordenarlos

saludos mortiprogramador, mira esto es lo que tengo:

Código PHP:
$RegistrosAMostrar=10;
if(isset($_GET['pag'])){
$RegistrosAEmpezar=($_GET['pag']-1)*$RegistrosAMostrar;
    $PagAct=$_GET['pag'];
}else{
    $RegistrosAEmpezar=0;
    $PagAct=1;
}

$datos = mysql_query("SELECT * FROM categorias_padre WHERE link = '$url1'", $conexion) or die(mysql_error());
$fetch = mysql_fetch_array($datos);

if(!empty($uso) and !empty($primero)) {
    if ($primero == "baratos") {
        if ($uso == "todos") { 
$consulta = "SELECT * FROM $url1 WHERE precio IN (SELECT MIN(precio) minimo FROM $url1 group by id_t ORDER BY minimo ASC) group by id_t ORDER BY precio ASC LIMIT $RegistrosAEmpezar, $RegistrosAMostrar"; } else {
$consulta = "SELECT * FROM $url1 WHERE precio IN (SELECT MIN(precio) minimo FROM $url1 group by id_t ORDER BY minimo ASC) AND condicion='$uso' group by id_t ORDER BY precio ASC LIMIT $RegistrosAEmpezar, $RegistrosAMostrar"; } }

    if ($primero == "caros") { 
    if ($uso == "todos") { 
$consulta = "SELECT * FROM $url1 WHERE precio IN (SELECT MAX(precio) maximo FROM $url1 group by id_t ORDER BY maximo DESC) group by id_t ORDER BY precio DESC LIMIT $RegistrosAEmpezar, $RegistrosAMostrar"; } else {
     $consulta = "SELECT * FROM $url1 WHERE precio IN (SELECT MAX(precio) maximo FROM $url1 group by id_t ORDER BY maximo DESC) AND condicion='$uso' group by id_t ORDER BY precio DESC LIMIT $RegistrosAEmpezar, $RegistrosAMostrar"; } }
    if ($primero == "comentados") { 
    if ($uso == "todos") { 
$consulta = "SELECT * FROM $url1 WHERE comentarios IN (SELECT MAX(comentarios) maximo FROM $url1 group by id_t ORDER BY maximo DESC) group by id_t ORDER BY comentarios DESC LIMIT $RegistrosAEmpezar, $RegistrosAMostrar"; } else {
     $consulta = "SELECT * FROM $url1 WHERE comentarios IN (SELECT MAX(comentarios) maximo FROM $url1 group by id_t ORDER BY maximo DESC) AND condicion='$uso' group by id_t ORDER BY comentarios DESC LIMIT $RegistrosAEmpezar, $RegistrosAMostrar"; } }
    if ($primero == "valorados") { 
    if ($uso == "todos") { 
$consulta = "SELECT * FROM $url1 WHERE valoraciones IN (SELECT MAX(valoraciones) maximo FROM $url1 group by id_t ORDER BY maximo DESC) group by id_t ORDER BY valoraciones DESC LIMIT $RegistrosAEmpezar, $RegistrosAMostrar"; } else {
     $consulta = "SELECT * FROM $url1 WHERE valoraciones IN (SELECT MAX(valoraciones) maximo FROM $url1 group by id_t ORDER BY maximo DESC) AND condicion='$uso' group by id_t ORDER BY valoraciones DESC LIMIT $RegistrosAEmpezar, $RegistrosAMostrar"; } }
     if ($primero == "novedades") { 
    if ($uso == "todos") { 
$consulta = "SELECT * FROM $url1 WHERE fecha IN (SELECT MAX(fecha) maximo FROM $url1 group by id_t ORDER BY maximo DESC) group by id_t ORDER BY fecha DESC LIMIT $RegistrosAEmpezar, $RegistrosAMostrar"; } else {
     $consulta = "SELECT * FROM $url1 WHERE fecha IN (SELECT MAX(fecha) maximo FROM $url1 group by id_t ORDER BY maximo DESC) AND condicion='$uso' group by id_t ORDER BY fecha DESC LIMIT $RegistrosAEmpezar, $RegistrosAMostrar"; } }
     
      }

else { 
if(!empty($uso)) {
    if ($uso == "todos") { 
$consulta = "SELECT count(*), id_t,nombre,img,precio,id_tienda FROM $url1 group by id_t, precio ASC LIMIT $RegistrosAEmpezar, $RegistrosAMostrar"; } else {
$consulta = "SELECT count(*), id_t,nombre,img,precio,id_tienda FROM $url1 where condicion='$uso' group by id_t LIMIT $RegistrosAEmpezar, $RegistrosAMostrar"; }
} else { $consulta = "SELECT count(*), id_t,nombre,img,precio,id_tienda FROM $url1 group by id_t LIMIT $RegistrosAEmpezar, $RegistrosAMostrar"; } }

$resultado = mysql_query($consulta, $conexion) or die(mysql_error());


if(!empty($uso) and !empty($primero)) {
    if ($primero == "baratos") {
        if ($uso == "todos") { 
$consulta2 = "SELECT * FROM $url1 WHERE precio IN (SELECT MIN(precio) minimo FROM $url1 group by id_t ORDER BY minimo ASC) group by id_t ORDER BY precio ASC"; } else {
$consulta2 = "SELECT * FROM $url1 WHERE precio IN (SELECT MIN(precio) minimo FROM $url1 group by id_t ORDER BY minimo ASC) AND condicion='$uso' group by id_t ORDER BY precio ASC"; } }

    if ($primero == "caros") { 
    if ($uso == "todos") { 
$consulta2 = "SELECT * FROM $url1 WHERE precio IN (SELECT MAX(precio) maximo FROM $url1 group by id_t ORDER BY maximo DESC) group by id_t ORDER BY precio DESC "; } else {
     $consulta2 = "SELECT * FROM $url1 WHERE precio IN (SELECT MAX(precio) maximo FROM $url1 group by id_t ORDER BY maximo DESC) AND condicion='$uso' group by id_t ORDER BY precio DESC"; } }
    if ($primero == "comentados") { 
    if ($uso == "todos") { 
$consulta2 = "SELECT * FROM $url1 WHERE comentarios IN (SELECT MAX(comentarios) maximo FROM $url1 group by id_t ORDER BY maximo DESC) group by id_t ORDER BY comentarios DESC"; } else {
     $consulta2 = "SELECT * FROM $url1 WHERE comentarios IN (SELECT MAX(comentarios) maximo FROM $url1 group by id_t ORDER BY maximo DESC) AND condicion='$uso' group by id_t ORDER BY comentarios DESC"; } }
    if ($primero == "valorados") { 
    if ($uso == "todos") { 
$consulta2 = "SELECT * FROM $url1 WHERE valoraciones IN (SELECT MAX(valoraciones) maximo FROM $url1 group by id_t ORDER BY maximo DESC) group by id_t ORDER BY valoraciones DESC"; } else {
     $consulta2 = "SELECT * FROM $url1 WHERE valoraciones IN (SELECT MAX(valoraciones) maximo FROM $url1 group by id_t ORDER BY maximo DESC) AND condicion='$uso' group by id_t ORDER BY valoraciones DESC"; } }
     if ($primero == "novedades") { 
    if ($uso == "todos") { 
$consulta2 = "SELECT * FROM $url1 WHERE fecha IN (SELECT MAX(fecha) maximo FROM $url1 group by id_t ORDER BY maximo DESC) group by id_t ORDER BY fecha DESC"; } else {
     $consulta2 = "SELECT * FROM $url1 WHERE fecha IN (SELECT MAX(fecha) maximo FROM $url1 group by id_t ORDER BY maximo DESC) AND condicion='$uso' group by id_t ORDER BY fecha DESC"; } }


}
 else { $consulta2 = "SELECT count(*), id_t,nombre,img,MIN(precio),id_tienda FROM $url1 group by id_t"; }
$resultado2 = mysql_query($consulta2, $conexion) or die(mysql_error());
$NroRegistros=mysql_num_rows($resultado2);

?>
<? while($fetch mysql_fetch_assoc($resultado)){
La consulta es la misma solo que cambio MIN(precio) por MAX(precio) "minimo" por "maximo" y el order...
  #10 (permalink)  
Antiguo 27/10/2015, 16:45
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Agrupar resultados y ordenarlos

Saludo

Uf, sí que tiene condiciones ese código, y sí mis ojos no se engañan
esta duplicado el if principal, y las variables!

Imagino que todo eso es por pruebas, o por algún
funcionamiento especial del aplicativo.

Sin embargo, para ayudarte necesitaría también un sql con la creación
de tablas, y la info de cada una, pues yo puedo inventarme datos
que esten bien, pero eso no solucionaría el problema que tienes.

Teniendo eso presente, te pregunto,
¿Si ejecutas las consultas directamente en phpmyadmin,
funcionan correctamente?

¿El problema es en la aplicación?

Pues lo único extraño que veo revisando algunos de los querys
es que algunos tienen un AND (AND condicion='$uso') que aplica fuera del IN,
yo también usaría ese AND dentro del IN.

Prueba eso, y comenta como te va con las consultas ejecutadas en phpmyadmin.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Última edición por mortiprogramador; 27/10/2015 a las 17:02
  #11 (permalink)  
Antiguo 28/10/2015, 11:13
 
Fecha de Ingreso: diciembre-2006
Mensajes: 35
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: Agrupar resultados y ordenarlos

Pues por más que investigue y pruebe cosas no doy con el problema me olvide decirte que la columna 'precio' es decimal / float , no se si puede estar allí el problema.
  #12 (permalink)  
Antiguo 28/10/2015, 13:06
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Agrupar resultados y ordenarlos

Saludo
Pero no has respondido mi pregunta.
¿Las consultas funcionan bien en PhpMyAdmin?

En cuanto al tipo de campo, no creo que sea el problema.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Última edición por mortiprogramador; 28/10/2015 a las 13:13
  #13 (permalink)  
Antiguo 28/10/2015, 13:27
 
Fecha de Ingreso: diciembre-2006
Mensajes: 35
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: Agrupar resultados y ordenarlos

ok, perdona.

he echo esta consulta:

Código HTML:
SELECT * FROM `informatica` WHERE `precio` IN (SELECT MAX(`precio`) `maximo` FROM `informatica` group by `id_t` ORDER BY `maximo` DESC) group by `id_t` ORDER BY `precio` DESC
me ha devuelto 5 resultados con los precios bien ordenados de esta manera:

Código HTML:
id | precio
32 | 5995.00
10 | 5660.00
8 | 235.00
6 | 227.00
4 | 220.00
al hacer esa misma consulta en la aplicación me devuelve:

Código HTML:
id | precio
4 | 197.00
6 | 227.00
8 | 235.00
10 | 90.00
32 | 48.00
Me acabo de dar cuenta que cuando lo hago descendentemente desde la aplicación obtengo precios que no corresponden a los ids.
  #14 (permalink)  
Antiguo 28/10/2015, 13:36
 
Fecha de Ingreso: diciembre-2006
Mensajes: 35
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: Agrupar resultados y ordenarlos

En cambio si hago la consulta para sacar los precios ordenados ascendentemente obtengo los mismos resultados que en la aplicación...

Código PHP:
SELECT FROM `informaticaWHERE `precioIN (SELECT MIN(`precio`) `maximoFROM `informaticagroup by `id_tORDER BY `maximoASCgroup by `id_tORDER BY `precioASC 
en phpmyadmin

Código HTML:
id | precio
11 | 48.00
13 | 90.00
2 | 197.00
6 | 227.00
8 | 235.00
y en aplicación:

Código HTML:
id | precio
11 | 48.00
13 | 90.00
2 | 197.00
6 | 227.00
8 | 235.00
me he dado cuenta que al hacerlo descendentemente desde phpmyadmin obtengo los 5 precios mas altos de la tabla sin respetar el grupo.

es decir:

Código HTML:
id | precio
32 | 5995.00
10 | 5660.00
8 | 235.00
6 | 227.00
4 | 220.00
en vez de:

Código HTML:
id | precio
8 | 235.00
6 | 227.00
2 | 197.00
13 | 90.00
11 | 48.00
  #15 (permalink)  
Antiguo 28/10/2015, 13:51
 
Fecha de Ingreso: diciembre-2006
Mensajes: 35
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: Agrupar resultados y ordenarlos

Uf, me acabo de hacer un lio...

te comento de nuevo:

en phpmyadmin al hacerlo descendentemente me devuelve:

Código HTML:
id | precio
32 | 5995.00
10 | 5660.00
8 | 235.00
6 | 227.00
4 | 220.00
al hacerlo desde la aplicación me devuelve:

Código HTML:
id | precio
2 | 197.00
6 | 227.00
8 | 235.00
13 | 90.00
11 | 48.00
al hacerlo ascendentemente desde phpmyadmin me devuelve:

Código HTML:
id | precio
11 | 48.00
13 | 90.00
2 | 197.00
6 | 227.00
8 | 235.00
y desde la aplicación ascendentemente:

Código HTML:
id | precio
11 | 48.00
13 | 90.00
2 | 197.00
6 | 227.00
8 | 235.00
algo no cuadra diría que el problema esta en la consulta...

descendentemente debería devolver:

Código HTML:
id | precio
8 | 235.00
6 | 227.00
2 | 197.00
13 | 90.00
11 | 48.00
  #16 (permalink)  
Antiguo 28/10/2015, 14:03
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Agrupar resultados y ordenarlos

Saludo
Las consultas no son el problema.

El asunto está en la aplicación, hay algo que evita
que la consulta correcta se ejecute, y se está ejecutando otra.

Prueba esto, has una página nueva, y solo
genera una consulta en ella.

Es decir, prueba cada consulta en esa página nueva.
Deben funcionar sin problema y correctamente los datos deben ser traidos.

Sí el resultado de esto es que todo está en orden,
pues no hay nada que hacer, hay que revisar las validaciones
del código en la página que actualmente se maneja.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #17 (permalink)  
Antiguo 29/10/2015, 05:39
 
Fecha de Ingreso: diciembre-2006
Mensajes: 35
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: Agrupar resultados y ordenarlos

Tienes razón, funciona correctamente, pero no como ami me gustaría.

Código PHP:
$consulta "SELECT * FROM informatica WHERE precio IN (SELECT MAX(precio) maximo FROM informatica group by id_t ORDER BY maximo DESC) group by id_t order by precio DESC";
$resultado mysqli_query($conexion$consulta) or die(mysql_error());
 
while(
$fetch mysqli_fetch_assoc($resultado)){ 
echo 
$fetch["precio"]; echo "<br/>";

Código PHP:
$consulta "SELECT * FROM informatica WHERE precio IN (SELECT MIN(precio) minimo FROM informatica group by id_t ORDER BY minimo ASC) group by id_t order by precio ASC";
$resultado mysqli_query($conexion$consulta) or die(mysqli_error());

while(
$fetch mysqli_fetch_assoc($resultado)){ 
echo 
$fetch["precio"]; echo "<br/>";

He probado estas dos consultas en una pagina en blanco y me devuelve:

Descendentemente:

Código HTML:
id | grupo | precio
32 | 2 | 5995.00
10 | 24 | 5660.00
33 | 25 | 650.00 
43 | 23 | 729.00
5 | 4 | 220.00
Ascendentemente:

Código HTML:
id | grupo | precio
11 | 2 | 48.00
13 | 24 | 90.00
2 | 4 | 197.00
6 | 23 | 227.00
8 | 25 | 235.00
Ordenándolo descendentemente me trae los precios mas altos de los grupos y lo que yo quiero lograr es que me los saque ascendentemente y los resultados obtenidos me los ordene descendentemente quedando así:

Código HTML:
id | grupo | precio
8 | 25 | 235.00
6 | 23 | 227.00
2 | 4 | 197.00
13 | 24 | 90.00
11 | 2 | 48.00
  #18 (permalink)  
Antiguo 29/10/2015, 08:44
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Agrupar resultados y ordenarlos

Saludo
Ah, eso ya es otro asunto.

Pues la consulta de los mínimos sirve,
es solo cambiar el ASC por DESC.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Etiquetas: agrupar, resultados, 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 03:27.