23/11/2011

Ordenar por fechas en campos varchar

Sí acostumbras utilizar un campo VARCHAR en mysql, para guardar fechas. Y posteriormente quieres ordenar los resultados de tus SELECT’s en base al mismo campo, podriamos hacerlo de la siguiente manera. ( Donde fecha tiene la siguiente nomenclatura: d.m.Y )


SELECT * FROM `tabla` ORDER BY STR_TO_DATE(fecha, \'%d.%m.%Y\') DESC

Y sigues jugando con ASC, DESC, WHERE, LIMIT..

Espero les sirva.

03/11/2011

Optimizando sentencias a mysql

Voy a mostrar un ejemplo de como optimizar tus consultas a una base de datos mysql. Para esto trabajaremos un clase en php muy sencilla.

Esta clase nos permitira crear desde luego un objeto y reutilizar los resultados de un select. De igual manera podremos ahorrar algunas lineas de codigo en los bucles, cosa que en lo personal me parece latoso.

A continuación un idea:


class DMysql {
// Clase para optimizar consultas a mysql
// Por Daniel Gerardo Sánchez
// www.danger.com.mx - dangercito@hotmail.com - @DangerCheshire
var $con;
var $bd;
var $msg;

function conexion($host,$db,$user,$pass){
$this->bd = $db;
if($this->con = mysql_connect($host,$user,$pass)){
if(mysql_select_db($db, $this->con)){
$this->msg = 'Se conecto.';
}else{
$this->msg = 'No se pudo conectar.';
}
}else{
$this->msg = 'No conecto al servidor.';
}
}

var $rows;
var $select;
function select($s){
$q = mysql_query($s,$this->con);
$this->rows = mysql_num_rows($q);
$this->select = '';
for($i=1;$i<=$this->rows;$i++){
$this->select[$i] = mysql_fetch_array($q);
}
return $this->rows;
}

function sql($s){
$q = mysql_query($s,$this->con);
}
}

Partiendo de esta idea de clase, podriamos hacer la impresión de un select, de la siguiente manera:


// Quiza esto lo jalamos desde inc..
include('DMysql.php');
$a = new DMysql();
$a->conexion('localhost','db','user','pass');
// End

// Aquí seria lo productivo de la clase
for($i=1;$i<=$a->select('SELECT * FROM `tabla`');$i++){
echo $a->select[$i]['campo'].'
';
}

// Para todo lo que no sea select
$a->sql('..sentencia..');

Y listo, de esta manera tendriamos todo mas limpio, mas organizado y facil de mantener. Espero les sirva.

02/11/2011

Unir resultados de dos o mas tablas

El detalle que surge es cuando quieres unir el resultado de dos o mas tablas.

Por ejemplo, en mi caso tengo una base de datos para newsletter, en cada tabla almaceno contactos con diferente estructura pero con dos campos en comun; “nombre y correo”.

Sí quisieramos mostrar un solo listado, sin hacer un bucle diferente en cada consulta, ni escribir mas lineas de codigo, mas rapida, y SIN REGISTROS REPETIDOS… Seria de la siguiente manera;


SELECT `nombre`,`correo` FROM `tabla1` UNION DISTINCT
SELECT `nombre`,`correo` FROM `tabla2` UNION DISTINCT
SELECT `nombre`,`correo` FROM `tabla3`

Tan sencillo como eso!.