Author:
Andrés Argüello Pitt
mar
13
La idea de este tutorial se basa en la siguiente situación: Hemos hecho una competencia donde se encontraba un formulario donde los participantes dejaban sus datos. La competencia corre por cuatro semanas y tenemos que elegir un ganador cada semana.
Como seguridad también en vez de elegir sólo un ganador elegiremos 5 ganadores de forma que contactémos al primero y en caso que no cumpla con los requisitos de la polÃtica de privacidad llamaremos al segundo y asà sucesivamente.
Bueno el código es muy fácil, se basa en la utilización de rand() que es una funcion incluida en mysql.
1
| SELECT * FROM `competicion` ORDER BY RAND( ) LIMIT 1"; |
Como habÃa comentado antes quiero seleccionar 5 ganadores que sean de la semana x y que no hayan ganado (la semana en la que han ingresado se guarda en la db al momento de registro) por lo que la consulta nos quedarÃa de la siguiente forma:
1
| $sql = "SELECT * FROM `competicion` WHERE semana = 'primera' AND gano = 'no' ORDER BY RAND( ) LIMIT 5"; |
Con eso ya tenemos todo, utilizando PHP se nos hace bien fácil enviarnos los resultados a nuestro email o simplemente imprimirlo en la pantalla.
El código completo serÃa algo como:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| $semana='primera';
$sql = "SELECT * FROM `competicion` WHERE semana = '$semana' AND gano = 'no' ORDER BY RAND( ) LIMIT 5";
$result = mysql_query($sql);
if (!$result) {
echo "No se pudo correr la consulta ($sql) de la DB: " . mysql_error();
exit;
}
if (mysql_num_rows($result) == 0) {
echo "No se encontraron registros";
exit;
}else{
while ($row = mysql_fetch_assoc($result)) {
$fecha=date('l jS \of F Y h:i:s A',$row['time']);
$ganador.="Id: ".$row["id"]."\nTitle: ".$row['titulo']."\nNombre: ".$row['nombre']."\nApellido: ".$row['apellido']."\nEmail: ".$row['email']."\nEdad: ".$row['edad']."\nRespuesta: ".$row['respuesta']."\nTime: ".$fecha."\n\n\n";
}
mysql_free_result($result);
$to='email del administrador o quien vaya a chequear que el ganador sea genuino';
mail($to,"ganador de la semana ".$semana,$ganador);
echo "la lista de ganadores ha sido enviada a $to";
} |
Author:
Andrés Argüello Pitt
dic
14
Un problema muy común es generar una serie de registros y para luego mostrarlos en un front end, estos registros pueden ser una tabla con imagens, usuarios productos, etc. El problema consiste en que una vez que mostramos uno de estos productos queremos agregar dos botones uno para ver el registro siguiente y otro para el anterior. y uno diria bueno todo bien hago una consulta preguntado cual es el id proximo mas grande en el caso de estar buscando el siguiente registro de la siguiente forma:
1
2
3
| SELECT field1
FROM tabla
WHERE id = ($idActual + 1) |
Y el anterior seria lo mismo
1
2
3
| SELECT campo
FROM tabla
WHERE id = ($idActual - 1) |
Hasta Acá todo bien , el problema surge cuando eliminamos un registro y nuestros id salta. por ejemplo eliminamos el registro 26 y nuestro registro actual es el 27. mysql no va a encontrar el registro numero 26 ($idActual – 1) y va a devolver una fila vacÃa.
La solución es bien simple:
En vez de usar el operador = para encontrar el id exacto que estamos buscando y luego sustraerle uno, lo que vamos a hacer es seleccionar todos los registros menores a nuestro registro actual usando el operador < y limitando el resultado a uno. De forma que para encontrar el próximo menor nos quedarÃa de la siguiente manera:
1
2
3
4
5
| SELECT campo
FROM tabla
WHERE ID < $idActual
ORDER BY id DESC
LIMIT 1 |
y para el registro mayor:
1
2
3
4
5
| SELECT campo
FROM tabla
WHERE ID > $idActual
ORDER BY id ASC
LIMIT 1 |
Espero que les sea útil.
Author:
Andrés Argüello Pitt
may
12
Hoy encontré una pagina muy práctica que te ayuda a formatear fechas usando la funcion MySQL DATE_FORMAT. Es muy fácil de usar sólo hace falta cambiar el desplegable en el formato que queremos el resultado y nos genera la consulta que debemos utilizar. Muy útil, espero que les sirva.
http://www.mysqlformatdate.com/
Author:
Andrés Argüello Pitt
ene
26
Me parece útil ir publicando trucos que me solucionan la vida. Esta semana estaba trabajando con varias tablas y sin querer me ingresaron varias entradas duplicadas sin darme cuenta al final del dÃa tenÃa 1557 entradas duplicadas, que si hubiese tenido que borrar una por una con el phpmyadmin me hubiese tomado mÃnimo media hora. Entonces investigué como hacer una consulta que automatice la acción.
Lo que hay que hacer es una tabla temporal con la misma estructura, pero vacÃa, para que nos sirva de backup y copiar los registros de la original excluyendo los duplicados, luego borramos la original y renombramos la temporal con el nombre de la original.
La consulta es la siguiente:
INSERT INTO `nombre_de_la_nueva_tabla` SELECT DISTINCT * FROM `nombre_de_la_tabla_original`.
Espero que a alguien le sea útil