Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Duda sobre las consultas a la BD con ORDER BY

Estas en el tema de Duda sobre las consultas a la BD con ORDER BY en el foro de PHP en Foros del Web. Bien pues lo que quiero es dar la opción a los visitantes de mi web a que puedan elegir mediante un select, si los resultados ...
  #1 (permalink)  
Antiguo 18/01/2014, 12:14
Avatar de angel_xx_1990  
Fecha de Ingreso: junio-2013
Ubicación: Guadalajara
Mensajes: 236
Antigüedad: 10 años, 9 meses
Puntos: 0
Exclamación Duda sobre las consultas a la BD con ORDER BY

Bien pues lo que quiero es dar la opción a los visitantes de mi web a que puedan elegir mediante un select, si los resultados que muestra la base de datos los muestra ordenados por Fecha, Precio ascendente o Precio descendente, Al pulsar un botón (BUSCAR.)que envié el formulario

Para ello e creado primero dos variables vacias:

Código PHP:
$fecha"";
$orden""
y luego:

Código PHP:
$opciones2 = array("Fecha","Precio ascendente","Precio descendente"); 
Y en el select:

Código PHP:
<option selected disabled>Seleccionar...</option>
            <?php
            
foreach($opciones2 as $opcion2) {
                echo 
"<option value=\"".$opcion2."\"";
                if(!
strcmp($or$opcion2)) {
                    echo 
" selected";
                }
                echo 
">".$opcion2."</option>";
            }
            
?>
      </select>

Hasta aquí creo que bien...pero lo que realmente quiero y mi duda viene aquí es saber como paso estos datos a la consulta, sin comparativos if...

Para ello me inventado lo siguiente que NO funciona y seguramete sea una gilipollez jeje


Código PHP:
if ($or=="Fecha"){
    
    
$orden='`id`';
    
$fecha='DESC';
    
}elseif (
$or=="Precio ascendente"){
    
    
$orden='precio';
    
$fecha='ASC';
    
}elseif (
$or=="Precio descendente"){
    
    
$orden='precio';
    
$fecha='DESC';

y en la consulta:

$rst_form=mysql_query("SELECT * FROM xxx WHERE descripcion LIKE '%".$busca."%' ORDER BY ".$orden." ".$fecha."");


intentando intentado no he conseguido nada...¿Alguna idea?


Gracias!
  #2 (permalink)  
Antiguo 18/01/2014, 12:21
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: Duda sobre las consultas a la BD con ORDER BY

imprimi $rst_form
  #3 (permalink)  
Antiguo 18/01/2014, 20:12
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Duda sobre las consultas a la BD con ORDER BY

Mejorando el codigo:

Código PHP:
Ver original
  1. //Remplazamos esto:
  2. $opciones2 = array("Fecha","Precio ascendente","Precio descendente");  
  3. // por esto:
  4. $opciones2 = array("date"=>"Fecha","prec_asc"=>"Precio ascendente","prec_desc"=>"Precio descendente");

Luego modificamos esto:

Código PHP:
Ver original
  1. <option selected disabled>Seleccionar...</option>
  2.             <?php
  3.             foreach($opciones2 as $key=>$value) {
  4.                 echo "<option value=\"".$key."\"";
  5.                 if(!strcmp($or, $key)) {
  6.                     echo " selected";
  7.                 }
  8.                 echo ">".$value."</option>";
  9.             }
  10.             ?>
  11.       </select>

Y para esto es mejor el switch:
Código PHP:
Ver original
  1. switch($or){
  2.     case 'date':
  3.         $order = " ORDER by id DESC ";
  4.         break;
  5.     case "prec_asc":
  6.         $order = " ORDER by precio ASC ";
  7.         break;
  8.     case "prec_desc":
  9.         $order = " ORDER by precio DESC ";
  10.         break;
  11.     default:
  12.         $order = " ";
  13.         break;
  14. }

Y al final:

$rst_form=mysql_query("SELECT * FROM xxx WHERE descripcion LIKE '%".$busca."%' $order");


Suerte!
__________________
Mono programando!
twitter.com/eguimariano
  #4 (permalink)  
Antiguo 19/01/2014, 06:14
Avatar de angel_xx_1990  
Fecha de Ingreso: junio-2013
Ubicación: Guadalajara
Mensajes: 236
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Duda sobre las consultas a la BD con ORDER BY

Bien e conseguido que lo ordene pero resulta curioso lo que pasa, cuando le digo que me ordene por precio ascendente por ejemplo me pone en primer lugar:

anuncios con el siguiente precio:

1º 10000€
2º 200€
3º 30000€


Es decir va comparando los números de la cifra pero no lo tiene en cuenta como un numero entero creo, es decir 10000 es mas que 200 pero como el dos es mas que el uno y lo que le siguen son ceros, lo pone así....

¿Por que ocurre ésto?
  #5 (permalink)  
Antiguo 19/01/2014, 06:16
Avatar de angel_xx_1990  
Fecha de Ingreso: junio-2013
Ubicación: Guadalajara
Mensajes: 236
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Duda sobre las consultas a la BD con ORDER BY

Solucionado, tenía puesto Varchar en vez de INT en la base de datos jejeje
  #6 (permalink)  
Antiguo 19/01/2014, 06:57
 
Fecha de Ingreso: diciembre-2012
Mensajes: 128
Antigüedad: 11 años, 4 meses
Puntos: 12
Respuesta: Duda sobre las consultas a la BD con ORDER BY

Porque no creas un archivo json por cada una de las tres salidas que quieres mostrar y según la que seleccionen muestras uno u otro, ahorrándote así varias consultas a la base de datos por cada usuario que entre en la web.
__________________
Comparador facturas de luz
  #7 (permalink)  
Antiguo 19/01/2014, 07:48
Avatar de angel_xx_1990  
Fecha de Ingreso: junio-2013
Ubicación: Guadalajara
Mensajes: 236
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Duda sobre las consultas a la BD con ORDER BY

¿Como se haría para consultar en un SELECT comparando un campo de mi BD con una variable?

Tengo:

Código PHP:
Ver original
  1. $rst_form=mysql_query("SELECT * FROM form WHERE apartado1=$sel $order");

quiero que compare el apartado1 con la variable $sel

así no me funciona ¿como sería?
  #8 (permalink)  
Antiguo 19/01/2014, 08:18
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: Duda sobre las consultas a la BD con ORDER BY

Código PHP:
Ver original
  1. $rst_form=mysql_query("SELECT * FROM form WHERE apartado1='$sel.$order'");

Pero las tienes que concatenar con algo...
  #9 (permalink)  
Antiguo 19/01/2014, 08:44
Avatar de angel_xx_1990  
Fecha de Ingreso: junio-2013
Ubicación: Guadalajara
Mensajes: 236
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Duda sobre las consultas a la BD con ORDER BY

Me temo que no funciona, $order no tiene nada que ver con apartado1.

$order contiene la ordenacion de la consulta un ORDER by id DESC por ejemplo

he probado con:

$rst_form=mysql_query("SELECT * FROM form WHERE apartado1=@sel $order");


y no me da errores pero me muestra como que no hay nada y si hay que coincidan...
  #10 (permalink)  
Antiguo 19/01/2014, 08:56
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: Duda sobre las consultas a la BD con ORDER BY

Ah, es verdad.

$rst_form=mysql_query("SELECT * FROM form WHERE apartado1='$sel' $order");
  #11 (permalink)  
Antiguo 19/01/2014, 09:13
Avatar de angel_xx_1990  
Fecha de Ingreso: junio-2013
Ubicación: Guadalajara
Mensajes: 236
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Duda sobre las consultas a la BD con ORDER BY

No entoendo muy bien que es lo que hace este código:

Código PHP:
Ver original
  1. Tipo&nbsp;&nbsp;<select name="tp" autofocus id="tp">
  2.             <option selected disabled>Seleccionar...</option>
  3.             <?php
  4.             foreach($opciones3 as $key=>$value) {
  5.                 echo "<option value=\"".$key."\"";
  6.                 if(!strcmp($tp, $key)) {
  7.                     echo " selected";
  8.                 }
  9.                 echo ">".$value."</option>";
  10.             }
  11.             ?>
  12.       </select>


En una misma página podría "convivir" sin dar error si hago otro igual pero para otro select, es decir:


Código PHP:
Ver original
  1. Tipo&nbsp;&nbsp;<select name="tp2" autofocus id="tp2">
  2.             <option selected disabled>Seleccionar...</option>
  3.             <?php
  4.             foreach($opciones4 as $key=>$value) {
  5.                 echo "<option value=\"".$key."\"";
  6.                 if(!strcmp($tp2, $key)) {
  7.                     echo " selected";
  8.                 }
  9.                 echo ">".$value."</option>";
  10.             }
  11.             ?>
  12.       </select>

o tendria tambien que cambiar el $key y el $ value:

Código PHP:
Ver original
  1. Tipo&nbsp;&nbsp;<select name="tp2" autofocus id="tp2">
  2.             <option selected disabled>Seleccionar...</option>
  3.             <?php
  4.             foreach($opciones4 as $key2=>$value2) {
  5.                 echo "<option value=\"".$key2."\"";
  6.                 if(!strcmp($tp2, $key2)) {
  7.                     echo " selected";
  8.                 }
  9.                 echo ">".$value."</option>";
  10.             }
  11.             ?>
  12.       </select>

Etiquetas: bd, fecha, order, select, sql, variable
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 12:09.