Ver Mensaje Individual
  #8 (permalink)  
Antiguo 03/09/2014, 17:44
Avatar de gnzsoloyo
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: seleccionar y separar correos de una base de datos

Pues yo te haría dos observaciones:
1) Las fechas no son "parecidas a" (LIKE), los meses, días y años son magnitudes escalares, y como tales son menores, iguales, mayores o están dentro de un rango, pero nunca son "parecidas".
El uso de LIKE en una comparación de valores numéricos hace que MySQL genere conversiones implícitas a cadena de texto, con resultados impredecibles y/o falsos. LIKE no está definido para magnitudes esclares, sino caracteres. No lo olvides.

2) En MySQL existe un modo más simple, dada la consulta que haces, sobre una sola columna, que te puede permitir evitar tener que realizar el while() en PHP.
Yo plantearía algo parecido a:
Código PHP:
Ver original
  1. public function destinatarios($a,$p,$m,$d) {
  2. //Consulta para listar los correos con los filtros que necesito. Al fina el REGEXP me permite filtrar que los correos cumplan el formato
  3.       $sql ="SELECT GROUP_CONCAT(DISTINCT correo_electronico) email ";
  4.       $sql .="FROM egresado e INNER JOIN registro_grado re  ON e.identificacion = re.identificacion ";
  5.       $sql .="    AND re.id_programa like '$p%' ";
  6.       $sql .="    AND YEAR(fecha_grado) = $a ";
  7.       $sql .="    AND MONTH(fecha_nacimiento) = $m ";
  8.       $sql .="    AND DAY(fecha_nacimiento)= $d ";
  9.       $sql .="    AND correo_electronico REGEXP '[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}'";
  10.       $result = mysql_query($sql, $this->conexion);
  11. //tengo el resultado si resulta menor que '0' me retorna falso de lo contrario continua
  12.       $email = "";
  13.           if (mysql_num_rows($result)>0) {
  14.               $fila= mysql_fetch_array($result);
  15.              $email=$fila['email'];
  16. //acontinuacion se hace la separación por comas "," o lo que se desee
  17.  
  18.          return $email;
  19.           }
  20.           return FALSE;
  21.  
  22.      }
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)