Foros del Web » Programando para Internet » PHP »

Ordenar campos de tabla

Estas en el tema de Ordenar campos de tabla en el foro de PHP en Foros del Web. Buenos dias, Tengo una tabla con diferentes columnas (Numero de proyecto, Cliente, Proveedor, etc) y quiero que el usuario pueda ordenar cada columna en orden ...
  #1 (permalink)  
Antiguo 05/09/2014, 04:26
 
Fecha de Ingreso: julio-2014
Mensajes: 53
Antigüedad: 9 años, 9 meses
Puntos: 1
Ordenar campos de tabla

Buenos dias,

Tengo una tabla con diferentes columnas (Numero de proyecto, Cliente, Proveedor, etc) y quiero que el usuario pueda ordenar cada columna en orden ascendente. Para ello hago la siguiente sentencia:

$query_Recordset1 = "SELECT * FROM `control de proyectos` ORDER BY '".$_GET['ordenar']."' ASC";

Y despues hago botoncitos como estos:

<input type="button" value="Ordenar por Numero de proyecto" onclick="location.href='VistaControl(Pgmaestra).ph p?ordenar=Numero de proyecto';"/>

<input type="button" value="Ordenar por Cliente (Empresa)" onclick="location.href='VistaControl(Pgmaestra).ph p?ordenar=Cliente (Empresa)';"/>

El problema es que cuando hago click en un boton de esos, se actualiza la pagina y la direccion cambia pero no se ordena nada... Alguien sabe a que es debido?
  #2 (permalink)  
Antiguo 05/09/2014, 04:53
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Ordenar campos de tabla

Antes que nada, decirte que no es nada recomendable usar nombres largos con espacios, substituye "Numero de proyecto", por "Numero" o por "NumeroDeProyecto", "NumProyecto"....

ordenar=NOMBRE DEL CAMPO

estrictamente el nombre del campo. "Cliente (Empresa)" no es el nombre del campo.

ORDER BY '".$_GET['ordenar']."' ASC";

ORDER BY `".$_GET['ordenar']."` ASC";

ojo al cambio!!!
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 05/09/2014, 05:18
 
Fecha de Ingreso: julio-2014
Mensajes: 53
Antigüedad: 9 años, 9 meses
Puntos: 1
Respuesta: Ordenar campos de tabla

Cita:
Iniciado por quimfv Ver Mensaje
Antes que nada, decirte que no es nada recomendable usar nombres largos con espacios, substituye "Numero de proyecto", por "Numero" o por "NumeroDeProyecto", "NumProyecto"....

ordenar=NOMBRE DEL CAMPO

estrictamente el nombre del campo. "Cliente (Empresa)" no es el nombre del campo.

ORDER BY '".$_GET['ordenar']."' ASC";

ORDER BY `".$_GET['ordenar']."` ASC";

ojo al cambio!!!
Buenas quimfv, gracias por tu respuesta!

Seguire tu recomendacion. He cambiado lo que me has dicho de las comillas simples por las tildes y ahora me sale el siguiente error: Unknown column '' in 'order clause'

Lo siento pero no he entendido nada de lo que me querias explicar en: "ordenar=NOMBRE DEL CAMPO

estrictamente el nombre del campo. "Cliente (Empresa)" no es el nombre del campo. "

Gracias de antemano otra vez
  #4 (permalink)  
Antiguo 05/09/2014, 05:51
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Ordenar campos de tabla

Cita:
error: Unknown column '' in 'order clause'
Sin ver lo que has hecho no te puedo decir nada. Pero si has normalizado los nombres de los campos (quitando blancos) y no usas palabras reservadas quita el delimitador


...ORDER BY ".$_GET['ordenar']." ASC";

El delimitador tilde grave, no comilla simple, se usa para delimitar nombres de campos que contengan blancos o para diferenciarlos de las palabra reservadas... luego si no usas ni blancos ni palabras reservadas no es necesario que los pongas.

Te aseguro que ganas mucha productividad usando una buena política de nombres, para los campos y para todos los objetos de la base de datos.

Que te parece mas rápido de escribir

`Numero de proyecto`
Numero_de_proyecto
numeroProyecto

ves alguna diferencia en el "valor" explicativo del nombre.

La comilla simple o apostrofe se usa para delimitar cadenas de texto, NO para delimitar nombres de objetos de la base de datos (campos, tablas, vistas...).


No me había dado cuenta VistaControl(Pgmaestra).php esto es el nombre de un fichero!!! No uses caracteres raros, ni blancos, ni paréntesis, ni barras, ni puntos, ni comas, ni tildes.... usa letras (sin tilde), números y como mucho _ (underscore).

Obviando el tema del nombre

VistaControl(Pgmaestra).php?ordenar=Cliente (Empresa)

Entiendes que lo que pongas detrás de = será lo que se leerá con $_GET['ordenar'], luego debe ser estrictamente el nombre del campo. "Cliente (Empresa)" no es el nombre del campo.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 05/09/2014 a las 06:14
  #5 (permalink)  
Antiguo 05/09/2014, 06:03
 
Fecha de Ingreso: julio-2014
Mensajes: 53
Antigüedad: 9 años, 9 meses
Puntos: 1
Respuesta: Ordenar campos de tabla

De acuerdo, lo he entendido lo de los nombres de los campos!

Ahora he quitado las tildes agudas y lo he dejado como me has dicho: ...ORDER BY ".$_GET['ordenar']." ASC"; y me da un error diferente: You have an error in your SQL syntax;
  #6 (permalink)  
Antiguo 05/09/2014, 06:12
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Ordenar campos de tabla

Cita:
You have an error in your SQL syntax;
Eso quiere decir que tienes un error de sintaxis SQL, pero si no muestras la query que estas usando no podemos imagiar que error puedes haber cometido.

Es el acento grave (http://es.wikipedia.org/wiki/Acento_grave http://es.wikipedia.org/wiki/Acento_agudo)
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #7 (permalink)  
Antiguo 05/09/2014, 06:44
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, 5 meses
Puntos: 2658
Respuesta: Ordenar campos de tabla

Cita:
Iniciado por alfuco Ver Mensaje
De acuerdo, lo he entendido lo de los nombres de los campos!

Ahora he quitado las tildes agudas y lo he dejado como me has dicho: ...ORDER BY ".$_GET['ordenar']." ASC"; y me da un error diferente: You have an error in your SQL syntax;
Seré curioso, pero... ¿has verificado que efectivamente esté llegando el valor en ese $_GET['ordenar']?
Porque uno de los errores que muestras, el de columna desconocida, parece indicar que el nombre ellega vacío.

Mínimamente, al menos en la etapa de desarrollo, tienes que ir verificando que lo que se genera como query sea correcto, cosa que puedes hacer con un simple echo:

Código PHP:
Ver original
  1. $query_Recordset1 = "SELECT * FROM `control de proyectos` ORDER BY ".trim($_GET['ordenar'])." ASC";
  2. echo $query_Recordset1;

Copia lo que salga y postea eso. Alli veremos qué puede estar pasando.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 08/09/2014, 02:23
 
Fecha de Ingreso: julio-2014
Mensajes: 53
Antigüedad: 9 años, 9 meses
Puntos: 1
Respuesta: Ordenar campos de tabla

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Seré curioso, pero... ¿has verificado que efectivamente esté llegando el valor en ese $_GET['ordenar']?
Porque uno de los errores que muestras, el de columna desconocida, parece indicar que el nombre ellega vacío.

Mínimamente, al menos en la etapa de desarrollo, tienes que ir verificando que lo que se genera como query sea correcto, cosa que puedes hacer con un simple echo:

Código PHP:
Ver original
  1. $query_Recordset1 = "SELECT * FROM `control de proyectos` ORDER BY ".trim($_GET['ordenar'])." ASC";
  2. echo $query_Recordset1;

Copia lo que salga y postea eso. Alli veremos qué puede estar pasando.
Al parecer esto si que sale bien, ya me me sale por ejemplo: SELECT * FROM ContProy ORDER BY 'Repetidas' ASC
  #9 (permalink)  
Antiguo 08/09/2014, 02:25
 
Fecha de Ingreso: julio-2014
Mensajes: 53
Antigüedad: 9 años, 9 meses
Puntos: 1
Respuesta: Ordenar campos de tabla

Cita:
Iniciado por quimfv Ver Mensaje
Eso quiere decir que tienes un error de sintaxis SQL, pero si no muestras la query que estas usando no podemos imagiar que error puedes haber cometido.

Es el acento grave ([URL]http://es.wikipedia.org/wiki/Acento_grave[/URL] [url]http://es.wikipedia.org/wiki/Acento_agudo[/url])
Código:
$query_Recordset1 = "SELECT * FROM ContProy ORDER BY '".$_GET['ordenar']."' ASC";
echo $query_Recordset1;
$query_limit_Recordset1 = sprintf("%s LIMIT %d, %d", $query_Recordset1, $startRow_Recordset1, $maxRows_Recordset1);
$Recordset1 = mysql_query($query_limit_Recordset1, $localhost) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);

if (isset($_GET['totalRows_Recordset1'])) {
  $totalRows_Recordset1 = $_GET['totalRows_Recordset1'];
} else {
  $all_Recordset1 = mysql_query($query_Recordset1);
  $totalRows_Recordset1 = mysql_num_rows($all_Recordset1);
}
$totalPages_Recordset1 = ceil($totalRows_Recordset1/$maxRows_Recordset1)-1;

$queryString_Recordset1 = "";
if (!empty($_SERVER['QUERY_STRING'])) {
  $params = explode("&", $_SERVER['QUERY_STRING']);
  $newParams = array();
  foreach ($params as $param) {
    if (stristr($param, "pageNum_Recordset1") == false && 
        stristr($param, "totalRows_Recordset1") == false) {
      array_push($newParams, $param);
    }
  }
  if (count($newParams) != 0) {
    $queryString_Recordset1 = "&" . htmlentities(implode("&", $newParams));
  }
}
$queryString_Recordset1 = sprintf("&totalRows_Recordset1=%d%s", $totalRows_Recordset1, $queryString_Recordset1);
  #10 (permalink)  
Antiguo 08/09/2014, 03:28
 
Fecha de Ingreso: julio-2014
Mensajes: 53
Antigüedad: 9 años, 9 meses
Puntos: 1
Respuesta: Ordenar campos de tabla

Por cierto, cuando abro la pagina php me sale: ( ! ) Notice: Undefined index: ordenar in C:\wamp\www\SIENS\admin\VistaControl(Pgmaestra).ph p on line 37
Es porque al inicio "ordenar" no esta definido, es cuando clicas en el boton cuando se define. Puede ser que no funcione por eso y que tenga que definir un "ordenar= algo" antes?
  #11 (permalink)  
Antiguo 08/09/2014, 03:31
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, 5 meses
Puntos: 2658
Respuesta: Ordenar campos de tabla

Cita:
Iniciado por alfuco Ver Mensaje
Al parecer esto si que sale bien, ya me me sale por ejemplo: SELECT * FROM ContProy ORDER BY 'Repetidas' ASC
En realidad sí que sale mal, porque "Repetidas" no es en ese caso una columna o un alias, sino una cadena de texto, ya que la estás poniendo entre apóstrofos.
Los apóstrofos en MySQL se usar exclusivamente para cadenas de texto.
Para que no genere errores debería ser:
Código MySQL:
Ver original
  1. SELECT * FROM ContProy
  2. ORDER BY Repetidas ASC

Si te fijas en el ejemplo previo que te puse verás que no puse los apóstrofos...

Por otro lado, eso es un tema que @quimfv ya te había marcado al principio. Un apóstrofo (') no es un acento agudo (`), y los segundos SI se usan para nombres de objetos de BBDD.
__________________
¿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 08/09/2014, 03:43
 
Fecha de Ingreso: julio-2014
Mensajes: 53
Antigüedad: 9 años, 9 meses
Puntos: 1
Respuesta: Ordenar campos de tabla

Me habia dejado el .trim de:
$query_Recordset1 = "SELECT * FROM `control de proyectos` ORDER BY ".trim($_GET['ordenar'])." ASC";
echo $query_Recordset1;

Si, la diferencia entre apostrofo y acento ya la entendi. Los acentos se usan para nombres con mas de una palabra, verdad?

Ahora en el echo me sale: SELECT * FROM ContProy ORDER BY CliEmpresa ASCFUNCTION siens.CliEmpresa does not exist
  #13 (permalink)  
Antiguo 08/09/2014, 05:00
 
Fecha de Ingreso: julio-2014
Mensajes: 53
Antigüedad: 9 años, 9 meses
Puntos: 1
Respuesta: Ordenar campos de tabla

No se que ha pasado no porque pero ahora me sale: SELECT * FROM ContProy ORDER BY ASCYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ASC' at line 1.......
  #14 (permalink)  
Antiguo 08/09/2014, 05:38
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, 5 meses
Puntos: 2658
Respuesta: Ordenar campos de tabla

Perdón, pero los errores que posteas son tan evidentes que asombra que tengas que preguntar.
En el primero, hay basura en el nombre y la cláusula ASC sale pegada al resto, por lo que está todo mal.
En el segundo caso ni siquiera llega el nombre de la columna...
¿No lo notaste?
__________________
¿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 08/09/2014, 05:48
 
Fecha de Ingreso: julio-2014
Mensajes: 53
Antigüedad: 9 años, 9 meses
Puntos: 1
Respuesta: Ordenar campos de tabla

Si, lo note. Lo que pregunto es como hacer que me ordene los resultados. Se donde estan los errores pero no se como solucionarlos. Puede ser que sea porque al principio "ordenar" no esta definido y necesitaria definirlo antes de hacer el $_GET?

Etiquetas: campos, select, tabla
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 01:01.