Comunidad de diseño web y desarrollo en internet online

ordenar consulta mysql

Citar            
MensajeEscrito el 01 Nov 2009 04:39 am
lógicamente, tengo un problema:
tengo que ordenar una consulta, pero el problema es que necesito que se ordene de acuerdo a tres columnas, o sea:
tengo las columnas prioridad, categoría y idproducto
necesito que ordene la prioridad en orden asc
dentro de la misma prioridad que ordene por categoría en orden asc
y dentro de todo este orden el idproducto en orden desc., o sea que a igual prioridad y categoría que aparesca primero lo que cargué último.
El tema es que no se si todo esto se puede hacer en la consulta o si conviene hacer la consulta y después ordenar el array assoc.
Desde ya muchas gracias a todo aquel que conteste.

Por albonino

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Nov 2009 06:25 am

Código MySQL :

ORDER BY prioridad, categoría, idproducto

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 01 Nov 2009 06:59 am
funciona perfecto, salvo que el orden de id producto sigue siendo ascendente, y el otro problema que tengo ahora es que en esa página tengo tres consultas distintas, una con un buscador que armé, otra con un filtro por categoría y la de todos los productos, y cuando pongo el ORDER BY, cuando quiero ir filtrar por categoría no me aparece ningún producto, y la verdad es que no entiendo porqué.
el código es así:

if(isset($_GET["busquen"]))
$busqueda=$_GET["busquen"];
$where_buscar=" WHERE nombre LIKE '%" . $busqueda . "%' or marca LIKE '%" . $busqueda . "%' or descripcion LIKE '%" . $busqueda . "%' or descripcionLarga LIKE '%" . $busqueda . "%' or nombreSubcat LIKE '%" . $busqueda . "%'";


if(isset($_GET["busquen"])) {
$consulta="SELECT idproducto,nombre,precio,idcategoria,prioridad,marca,imagen,descripcion FROM productos".$where_buscar;
$resultado=mysql_query($consulta);} else
{

if(isset($_GET["idsubcate"])) {
$consulta="SELECT idproducto, nombre,precio,idcategoria,prioridad,marca,imagen,descripcion FROM productos WHERE idSubcat=".$_GET["idsubcate"] ;
$resultado=mysql_query($consulta);



} else {



$consulta="SELECT idproducto,nombre,precio,idcategoria,prioridad,marca,descripcion,imagen FROM productos ORDER BY idproducto DESC,prioridad ASC,idcategoria ".$where;
$resultado=mysql_query($consulta);}
}

Por albonino

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Nov 2009 07:21 am
tranquilo, estas mezclando php con sql y son 2 cosas totalmente distintas, ademas no estas validando los datos que vienen por GET y eso es un atentado a la seguridad

volviendo al tema: redacta nuevamente la pregunta pero solo con el SQL


mañana veo mejor tu tema, :P ahora no tengo cabeza para eso

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 01 Nov 2009 01:20 pm
gracias Inyaka, yo mientras tanto voy a estar tratando de pasar en limpio lo que entiendo de tu respuesta (o sea, no tu respuesta sino lo que yo entiendo) a ver si puedo desaznarme un poco.

Por albonino

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Nov 2009 02:43 am
El tema con ésto es que era un laburito muy sencillo que me animé a hacer, pero después me cambiaron los tantos y me mataron.
Estuve todo el día tratando de ordenar ésto y definí los posibles valores de las variables con php para tratar de no hacer tanta mezcla, pero me da que no hay productos disponibles a la venta.
Paso el código completo cómo quedó esperando opiniones que me salven.

Código PHP :

<?
//Aca defino si tengo filtros: primero si hay algo en el buscador, si no filtra si hay idcat, tercero si hay idsubcat y si no hay ninguno $where esta vacio.
// a su vez defino cual es el orden, sobre todo porque en el caso de que haya idcat, creo que no puedo ordenar por idcat. Teóricamente sólo puede entrar un filtro por vez.

if(isset($_GET["busquen"])){ 
$busqueda=$_GET["busquen"];
$where=" WHERE nombre LIKE '%" . $busqueda . "%' or marca LIKE '%" . $busqueda . "%' or descripcion LIKE '%" . $busqueda . "%' or descripcionLarga LIKE '%" . $busqueda . "%' or nombreSubcat LIKE '%" . $busqueda . "%'";
$orden="ORDER BY prioridad ASC,idcategoria ASC,idproducto DESC ";}

elseif (isset($_GET["idcat"])){
$where=" WHERE idcategoria=".$_GET["idcat"];
$orden="ORDER BY prioridad ASC,idproducto DESC ";}

elseif (isset($_GET["idsubcate"])){
$where="WHERE idSubcat=".$_GET["idsubcate"];
$orden="ORDER BY prioridad ASC,idproducto DESC ";}

else {
$where="";
$orden="ORDER BY prioridad ASC,idcategoria ASC,idproducto DESC ";}

$consulta="SELECT * FROM productos".$orden.$where;
$resultado=mysql_query($consulta);


if(!@mysql_num_rows($resultado)) {
   echo "<br> &nbsp;<br>&nbsp; &nbsp; &nbsp;No hay productos disponibles a la venta";
} else {

//Acá lo que hago es hacer una consulta a otra tabla para, en el caso de que venga por get idcat, poder hacer un pequeño menú por subcat antes de listar los productos.
if(isset($_GET["idcat"])) $where_subcat=" WHERE idcategoria=".$_GET["idcat"];
else $where="";

   if(isset($_GET["idcat"])) {
   $consulta_subcat="SELECT idSubcat,nombreSubcat FROM subCat".$where_subcat;
   $resultado_subcat=mysql_query($consulta_subcat);
   
?><br /><span class="links"> &nbsp; &nbsp;<?   while($fila_subcat=mysql_fetch_assoc($resultado_subcat)) {
   echo '<a href="modelo.php?p=catalogo&idsubcate='.$fila_subcat["idSubcat"].'"><span class="links"> '.$fila_subcat["nombreSubcat"].'</span></a>&nbsp; &nbsp;';
   }
   } ?></span>


<div>

</div>


<div id="prodCat">

  <? 
while($fila=mysql_fetch_assoc($resultado)) 
{



?>
  
    <div class="articulo">
       <div class="foto"><a href="modelo.php?p=detalle_producto&id=<? echo $fila["idproducto"]; ?>"><img src="phpThumb/phpThumb.php?src=../<? echo $fila["imagen"]; ?>&h=125 &w=120 &far=1" border="0"></a></div>
        <div class="descripcion">Descripci&oacute;n</div>
        <div class="textoDescrip"><p><span class="nombreCatal"><? echo $fila["nombre"]; ?></span><br />
    <? echo $fila["marca"]; ?><br />
<!--    $&nbsp;<? //echo $fila["precio"]; ?><br />-->
    <? echo $fila["descripcion"]; ?></p>
    </div>
    </div>
      
        
<?
}
?>
</div>
<? } ?>
<p>&nbsp;</p>

Por albonino

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Nov 2009 03:34 pm
Ya está. Hay que dormir un poco y aprender un par de yeites cómo poner un echo a la consulta a ver cómo sale, y ahí me di cuenta que el problema era que no había espacio antes y después de los WHERE y ORDER BY. Y me pasé horas rompiéndome la cabeza por esa estupidez.
Bueno, gracias y hasta la próxima

Por albonino

3 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.