jueves, 2 de abril de 2020

Cómo ordenar una consulta de MySQL utilizando ORDER by y PDO

En algunas ocaciones nos encontramos con la necesidad de ordenar los resultados de una consulta, ya sea de menor a mayor, ascendente o descendente o como sea, en esta ocación voy a mostrar una manera de hacerlo con clases, MySQL y PDO. Lo primero que tenemos que hacer es crear la clase asique procedemos a cerearla:
class ordenar{}
bueno... logicamente con esto no vamos a hacer nada asique pasemos a lo siguiente que será crear la conexión a la base de datos pero antes debo aclarar algo, esta clase es hija de otra clase asique vamos a extender de una clase llamada PDO_class.php que es quien realmente tiene la conexión, como no es el objetivo de este post no voy a publicar como está echo esa clase PDO_class.php y quedará para otra ocación
class ordenar extends PDO_class { }
ahora colocaremos el constructor (como se supone)
class ordenar extends PDO_class { private $db; /** * Constructor, entrega la conexion a la base de datos */ public function __construct() { $this->db = $this->conectarDB(); } }
finalmente lo que haremos es crear un método en el cual haremos la consulta a la base de datos y agregaremos algunas otras cositas para darle un poquito mas de forma al asunto
class ordenar extends PDO_class { private $db; /** * Constructor, entrega la conexion a la base de datos */ public function __construct() { $this->db = $this->conectarDB(); } function listaOrdenada() { // A partir de este método vamos a listar los resultados $res = $this->db->query("SELECT * FROM tabla WHERE campo ORDER BY campo DESC"); if (!$res) echo 'ERROR: error en ordenar - function listaOrdenada linea XXX'; // esto es para personalizar un mensaje de error y saber en que línea falló el script (logicamente si falló) else { $algo = ''; foreach($res as $row) { $algo .= $row['campo'] . '
'; } echo $algo; } } }

Una muy breve explicación va a ser que en primer lugar tenemos una clase común y corriente extendida de un PDO_class que es quien tiene la conexión (ya en otro post haré algo con eso), luego tenemos un constructor que, valgame la redundancia, construye la conexión a la base de datos, luego tenemos el método que hace el listado ordenado segun lo que nosotros queramos y aquí vamos a detenernos a analizar un poquito mas a fondo. Lo primero con lo que nos encontramos en este método es con la consulta (nada fuera de lo normal para PDO), en nuestro caso lo que hacemos es consultar a la base de datos seleccionando TODO desde la tabla llamada "tabla" desde el campo llamado "campo", ordenado de tal forma que se tengan en cuenta los valores del campo llamado "campo" en orden descendente, osea que, analiza todos los registros de "campo" y los ordena segun su valor de forma descendente. Luego de la consulta lo que tenemos es una simple comprobación y un mensaje de error (es saludable y recomendable hacerlo de esta forma indicando donde estuvo el error, en este caso lo que indico es el nombre de la clase, el método y la línea donde se halla el posible error, para saber la linea y reemplazar el XXX simplemente miren a la izquierda de su editor y van a saber en donde estan parados!). Seguidamente lo que tenemos es lo siguiente: definimos la variable "$algo" con un valor vacío ($algo = '';), luego lo que hacemos es un foreach normal(foreach($res as $row)), el foreach mas típico, luego lo que hacemos es definir $algo con el valor del campo y generamos un bucle que hasta que no se terminen los resultados seguira agregando a $algo la cadena "$row['campo'] . '
';" donde $row['campo'] es el valor del registro en la tabla llamada "tabla" y en el campo llamado "campo" :). Por ultimo lo que tenemos es un "echo $algo" que imprime todo lo que pretendemos mostrar.

Bueno, esto fué todo por hoy, espero a alguien mas le sirva, porque a mi que soy bastante olvidadizo me sirve y mucho :)

No hay comentarios:

Publicar un comentario

TkInter - de marciano a humano - sección 13 - El Widget LabelFrame

  13 El widget LabelFrame El widget LabelFrame al igual que el widget Frame es un contenedor espacial, un área rectangular que puede...