PHP - Agrupar resultados y ordenarlos

   
Vista:

Agrupar resultados y ordenarlos

Publicado por jorge (32 intervenciones) el 22/10/2015 12:25:22
Hola estoy estancado en un proyecto y el problema es que estoy agrupando resultados y no logro ordenarlos.

1
SELECT count(*), id_t,nombre,img,MIN(precio),id_tienda FROM $url1 group by id_t LIMIT $RegistrosAEmpezar, $RegistrosAMostrar

los quiero ordenar por precios bajos primero, es del tipo float.

también he probado:

1
SELECT count(*), id_t,nombre,img,precio,id_tienda FROM $url1 group by id_t order by precio ASC LIMIT $RegistrosAEmpezar, $RegistrosAMostrar

Que hago mal? Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

Agrupar resultados y ordenarlos

Publicado por xve (5520 intervenciones) el 22/10/2015 15:43:50
Hola Jorge, de memoria, creo que va el order by antes que el group by... puede ser ese el problema?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Agrupar resultados y ordenarlos

Publicado por Jorge (32 intervenciones) el 22/10/2015 16:34:51
No es el problema, si lo pongo antes que el group by da error de sintaxis.

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'group by id_t LIMIT 0, 2' at line 1

1
SELECT count(*), id_t,nombre,img,precio,id_tienda FROM $url1 order by precio ASC group by id_t LIMIT $RegistrosAEmpezar, $RegistrosAMostrar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Agrupar resultados y ordenarlos

Publicado por xve (5520 intervenciones) el 22/10/2015 17:04:11
Hola Jorge, tienes toda la razón, yo te lo he dicho al revés, tu lo tenias bien...

He probado con una tabla mía, y me funciona perfectamente tal y como tu lo tienes...

1
2
3
SELECT * FROM `Test` group by type
order by type
limit 10

Nos puedes mostrar como te devuelve los resultados?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Agrupar resultados y ordenarlos

Publicado por Jorge (32 intervenciones) el 22/10/2015 17:54:47
así me devuelve los resultados:
Sin_t_tulo

como ves, los precios desordenados...

Esto es la consulta donde ordeno los resultados por precio.
1
$consulta = "SELECT count(*), id_t,nombre,img,precio,id_tienda FROM $url1 group by id_t order by precio ASC LIMIT $RegistrosAEmpezar, $RegistrosAMostrar";
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Agrupar resultados y ordenarlos

Publicado por Jorge (32 intervenciones) el 22/10/2015 17:55:16
Esto es todo el código:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<?php
$RegistrosAMostrar=2;
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);
 
$consulta = "SELECT count(*), id_t,nombre,img,precio,id_tienda FROM $url1 group by id_t order by precio ASC LIMIT $RegistrosAEmpezar, $RegistrosAMostrar";
 
$resultado = mysql_query($consulta, $conexion) or die(mysql_error());
 
$consulta2 = "SELECT count(*), id_t,nombre,img,MIN(precio),id_tienda FROM $url1 group by id_t order by precio";
$resultado2 = mysql_query($consulta2, $conexion) or die(mysql_error());
$NroRegistros=mysql_num_rows($resultado2);
 
?>
<? while($fetch = mysql_fetch_assoc($resultado)){
 $sql="SELECT * FROM $url1 where id_t='".$fetch["id_t"]."'";
$r=mysql_query($sql);
$prices=mysql_num_rows($r);
 
?>
<div class="resultados-content">
<?
$sql="SELECT MAX(precio) FROM $url1 where id_t='".$fetch["id_t"]."'";
$result=mysql_query($sql, $conexion);
$price_max=mysql_fetch_row($result);
$sql="SELECT MIN(precio) FROM $url1 where id_t='".$fetch["id_t"]."'";
$result=mysql_query($sql, $conexion);
$price_min=mysql_fetch_row($result);
 
$extdatos="SELECT * FROM tiendas_informatica where tienda='".$fetch["tienda"]."'";
$result1=mysql_query($extdatos, $conexion);
$fetch1 = mysql_fetch_array($result1);
$extdatos2="SELECT * FROM tiendas_informatica where id='".$fetch["id_tienda"]."'";
$result2=mysql_query($extdatos2, $conexion);
$fetch2 = mysql_fetch_array($result2);
 ?>
<div class="img">
<img src="<? echo "".$fetch["img"].""; ?>" alt="<? echo "".ucfirst(strtolower($fetch["nombre"]))."" ?>">
</div><div class="content-titulo"><span><a href="#" style="font-size:16px;font-weight:bold; text-decoration:none; color:#444;" title=<? echo "".ucfirst(strtolower($fetch["nombre"])).""; ?>><? echo "".ucfirst(strtolower($fetch["nombre"])).""; ?></a></span><br/><span class="price">Precios desde <? echo $price_min[0]; ?> € a <? echo $price_max[0]; ?></span></div><div class="content-oferta"><span style="font-size:11px;"> <? echo $fetch2['tienda']; ?></span><br/><br/><span style="font-size:17px;color:#E96D1B; font-weight:bold;"><? echo $price_min[0]; ?></span><div class="content-boton">Ver oferta</div>
</div>
<?
if(!isset($numof)){
$numof = 1;
}
if(!isset($cont)){
$cont = 1;
}
$consultat = "SELECT * FROM $url1 where id_t='".$fetch["id_t"]."' ORDER by precio ASC LIMIT 0,4";
$resultadot = mysql_query($consultat, $conexion) or die(mysql_error());
 echo "<div class=\"content-medio\">";
while($tienda = mysql_fetch_assoc($resultadot)){
$consultat1 = "SELECT * FROM tiendas_informatica where id='".$tienda["id_tienda"]."'";
$resultadot1 = mysql_query($consultat1, $conexion) or die(mysql_error());
$tienda1 = mysql_fetch_assoc($resultadot1);
?>
<div class="boton1"><? echo $tienda1["url"]; ?> <span class="b2"><? echo $tienda["precio"]; ?></span></div>
<? } ?>
</div><div class="content-opiniones"><div class="carita"></div><span style="font-weight:bold; font-size:15px;">90 / 100</span><br/><span style="font-size:11px;">4567 opiniones</span></div>
<div class="content-resultados" onclick="muestra_oculta('cont<? echo $cont; ?>')"><span style="font-size:14px; font-weight:bold;">Ver ofertas</span><br/><span style="font-size:11px;">de <? echo "$prices"; ?> tiendas</span>
</div></div>
<div id="cont<? echo "$cont"; ?>" style="display:none;">
 
<? $cont++;
if(!empty($uso)) {
if ($uso == "todos") { $consultat = "SELECT * FROM $url1 where id_t='".$fetch["id_t"]."' ORDER by precio ASC"; } else {
$consultat = "SELECT * FROM $url1 where id_t='".$fetch["id_t"]."' AND condicion='$uso' ORDER by precio ASC"; } } else { $consultat = "SELECT * FROM $url1 where id_t='".$fetch["id_t"]."' ORDER by precio ASC"; }
$resultadot = mysql_query($consultat, $conexion) or die(mysql_error());
?>
<ul class="pagination1">
 
<? while($tienda = mysql_fetch_assoc($resultadot)){
$consultat1 = "SELECT * FROM tiendas_informatica where id='".$tienda["id_tienda"]."'";
$resultadot1 = mysql_query($consultat1, $conexion) or die(mysql_error());
$tienda1 = mysql_fetch_assoc($resultadot1); ?>
 
<li><div style="width:100px; border-right:1px solid #E8E8E8;border-bottom:1px solid #E8E8E8; float:left; text-align:center;padding:4px; height:45px;"><a href="#" target="_blank" style="color:#3C5A99;"><img src="<? echo $tienda1["img"]; ?>" alt="<? echo $tienda1["tienda"]; ?>"></a><div style="font-size:12px;margin-top:-3px;"><a href="#" target="_blank" style="color:#2567AD;">Ficha tienda</a></div></div><a href="#" target="_blank" style=\"font-weight:bold; "><div style="width:400px; border-right:1px solid #E8E8E8;border-bottom:1px solid #E8E8E8; float:left;padding-top:18px;padding-left:5px; height:35px; font-size:14px;"><? echo ucfirst(strtolower($tienda["nombre"])); ?></div></a><a href="#" target="_blank" style="font-weight:bold; "><div style="width:100px; border-bottom:1px solid #E8E8E8; float:left;padding:4px; height:45px;"> <span class="b3"><? echo $tienda["precio"]; ?></span><br/><span class="b2"><? if ($tienda["gastos_envio"] == "0") { ?> Consultar en la tienda</span> <? } elseif ($tienda["gastos_envio"] == "1") { ?>Envío gratuito</span><? } else { ?>+ <? echo $tienda["gastos_envio"]; ?> € de envío</span> <? } ?></div></a><div class="clearfloat"></div></li>
 
<? } ?>
</ul><div class="button-closed" onclick="muestra_oculta('cont<? echo $cont - 1; ?>')">Cerrar</div></div><hr/><br/>
 <? $numof++; ?>
 
<? } $d = $fetch["id_t"];
 
$array_ced = explode(",", $ced);
if(!in_array($fetch["id_t"], $array_ced)){ $ced = $ced . "," . $fetch["id_t"]; }
$PagAnt=$PagAct-1;
$PagSig=$PagAct+1;
$PagUlt=$NroRegistros/$RegistrosAMostrar;
$Res=$NroRegistros%$RegistrosAMostrar;
if($Res>0) $PagUlt=floor($PagUlt)+1;
if(!empty($uso)) {
 $uri = strstr($_SERVER['REQUEST_URI'],"?");
 echo "<div class=\"pagination\"><a href=\"$url/1/$uri\"><div class=\"button-pag\">Primero</div></a>";
if($PagAct>1) echo "<a href=\"$url/$PagAnt/$uri\"><div class=\"button-pag\">Anterior</div></a>";
echo "<div class=\"button-pag1\">Página: ".$PagAct." de ".$PagUlt."</div>";
if($PagAct<$PagUlt)  echo "<a href=\"$url/$PagSig/$uri\"><div class=\"button-pag\">Siguiente</div></a>";
echo "<a href=\"$url/$PagUlt/$uri\"><div class=\"button-pag\">Ultimo</div></a></div>";
   } else {
   echo "<div class=\"pagination\"><a href=\"$url/1\"><div class=\"button-pag\">Primero</div></a>";
if($PagAct>1) echo "<a href=\"$url/$PagAnt\"><div class=\"button-pag\">Anterior</div></a>";
echo "<div class=\"button-pag1\">Página: ".$PagAct." de ".$PagUlt."</div>";
if($PagAct<$PagUlt)  echo "<a href=\"$url/$PagSig\"><div class=\"button-pag\">Siguiente</div></a>";
echo "<a href=\"$url/$PagUlt\"\"><div class=\"button-pag\">Ultimo</div></a></div>"; }
 ?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Agrupar resultados y ordenarlos

Publicado por Jorge (32 intervenciones) el 24/10/2015 13:21:49
Buscando información creo que el problema es que el precio esta ordenado en función del id del precio 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.. entonces ahí ya pierde el orden yo quiero que me lo vuelva a ordenar y aparezca primero el de 4 €.. ni idea de como podría hacerlo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar