Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] seleccionar y separar correos de una base de datos

Estas en el tema de seleccionar y separar correos de una base de datos en el foro de PHP en Foros del Web. Tengo una base de datos con los correos electrónicos de diferentes usuarios a los cuales necesito enviar email y para ello debo seleccionarlos mi pregunta ...
  #1 (permalink)  
Antiguo 29/08/2014, 16:33
 
Fecha de Ingreso: agosto-2014
Mensajes: 18
Antigüedad: 9 años, 8 meses
Puntos: 1
Pregunta seleccionar y separar correos de una base de datos

Tengo una base de datos con los correos electrónicos de diferentes usuarios a los cuales necesito enviar email y para ello debo seleccionarlos

mi pregunta es como puedo después de llamar estos correos de la BD que me los separe con ',' para que me sea posible envialos, se me ocurre que puede ser con un foreach
  #2 (permalink)  
Antiguo 29/08/2014, 19:34
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: seleccionar y separar correos de una base de datos

Claro, acumulas los correos en un array con un loop, de ahí usas join() para unirlos por comas.

Consulta el manual.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 30/08/2014, 07:49
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 9 años, 9 meses
Puntos: 30
Respuesta: seleccionar y separar correos de una base de datos

Si lo que quieres hacer es hacer un envío masivo pues es sencillo, con un bucle while a la consulta, vas guardando cada correo a una variable separandolos por comas...

while($consulta) { $correos = $correos.', '; }
  #4 (permalink)  
Antiguo 02/09/2014, 14:56
 
Fecha de Ingreso: agosto-2014
Mensajes: 18
Antigüedad: 9 años, 8 meses
Puntos: 1
Respuesta: seleccionar y separar correos de una base de datos

He intentado de diferentes maneras incluso con el implode y no me funciona la consulta es la siguiente:

Código PHP:
Ver original
  1. $sql ="select distinct correo_electronico
  2. from egresado e, registro_grado re
  3. WHERE e.identificacion =re.identificacion
  4. and re.id_programa like '".$p."%'
  5. and year(fecha_grado) like '".$a."%'
  6. and month(fecha_nacimiento)like '".$m."%'
  7. and day(fecha_nacimiento)like '".$d."%'";
  8.  
  9.  $result = mysql_query($sql, $this->conexion);

almaceno el resultado en un array pero al momento de pasarlo a String separado por coma solo me muestra uno de los registro o me da error
espero me puedan colaborar con esto
  #5 (permalink)  
Antiguo 02/09/2014, 15:09
 
Fecha de Ingreso: agosto-2014
Mensajes: 18
Antigüedad: 9 años, 8 meses
Puntos: 1
Respuesta: seleccionar y separar correos de una base de datos

Para que perder
  #6 (permalink)  
Antiguo 02/09/2014, 15:10
 
Fecha de Ingreso: agosto-2014
Mensajes: 18
Antigüedad: 9 años, 8 meses
Puntos: 1
Respuesta: seleccionar y separar correos de una base de datos

Cita:
Iniciado por pateketrueke Ver Mensaje
Claro, acumulas los correos en un array con un loop, de ahí usas join() para unirlos por comas.

Consulta el manual.
Para que pierdes tu tiempo dando respuestas que no sirven de nada, si lo pregunto es porque tal vez no tenga el tiempo suficiente para consultar un manual, ademas de que la logica la tengo el problema es hacerla funcionar en lo cual tu no aportas en nada
  #7 (permalink)  
Antiguo 03/09/2014, 15:56
 
Fecha de Ingreso: agosto-2014
Mensajes: 18
Antigüedad: 9 años, 8 meses
Puntos: 1
Respuesta: seleccionar y separar correos de una base de datos

Por si alguien mas lo necesita continuación dejo la función de como solucione.


Código PHP:
public function destinatarios($a,$p,$m,$d) {
//Consulta para listar los correos con los filtros que necesito. Al fina el REGEXP me permite filtrar que los correos cumplan el formato
      
$sql ="select distinct correo_electronico 
      from egresado e, registro_grado re 
      WHERE e.identificacion =re.identificacion 
      and re.id_programa like '"
.$p."%' 
      and year(fecha_grado) like '"
.$a."%' 
      and month(fecha_nacimiento)like '"
.$m."%' 
      and day(fecha_nacimiento)like '"
.$d."%' 
      and correo_electronico REGEXP '[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}'"
;
         
$result mysql_query($sql$this->conexion);
//tengo el resultado si resulta menor que '0' me retorna falso de lo contrario continua
          
if (mysql_num_rows($result)>0) {
              
$mails = array();
         while(
$filamysql_fetch_array($result)){
             
$mails[]=$fila['correo_electronico'];}
//acontinuacion se hace la separación por comas "," o lo que se desee
             
$correos implode(","$mails);
         return 
$correos;
          }
          return 
FALSE;

     } 
  #8 (permalink)  
Antiguo 03/09/2014, 17: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, 4 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)
  #9 (permalink)  
Antiguo 19/09/2014, 08:20
 
Fecha de Ingreso: agosto-2014
Mensajes: 18
Antigüedad: 9 años, 8 meses
Puntos: 1
Respuesta: seleccionar y separar correos de una base de datos

Entiendo lo que me quieres decir del like lo que pasa es que la idea de esta consulta es que el usuario pueda seleccionar los correos ya sea por programa, por año, por mes y día, seleccionando uno o todos los anteriores. por lo que si solo seccionan una el resto de variables estarían vacías y como tu lo planteas el resultado seria 0 en cambio con el like si la variable esta vacía entiende como que debe mostar todas.
por otro lado estoy tomando las fechas separando años-meses-días por lo que terminan siendo solo números por ejemplo mes de 01 a 12 que no se repiten y si se pueden comparar.
En fin entiendo que ahí formas apropiadas, pero ¿que seria de la programación si no se adapta a las necesidades?
  #10 (permalink)  
Antiguo 19/09/2014, 09:30
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, 4 meses
Puntos: 2658
Respuesta: seleccionar y separar correos de una base de datos

Estás yendo en ese punto por el camino equivocado.
La programación es adaptable. Las bases de datos son otra cosa.

Cuando usas una cláusula en un contexto para el que no ha sido definida, existen tres posibilidades:
1) No te devuelve datos, porque no los encuentra en su contexto.
2) Te devuelve datos incorrectos, porque las conversiones automáticas generan errores de busqueda.
3) Te baja la performance de las queries, disparando problemas de otros ordenes, por exceso de procesamiento.

SQL no es PHP. Tiene reglas estrictas que se deben seguir, y forzarlas se paga con ineficiencia y precisión. Y todo eso cuesta.

Lo digo por las malas experiencias que tuve al principio hasta que descrubrí que las advertencias que me hicieron eran ciertas.
Cita:
por otro lado estoy tomando las fechas separando años-meses-días por lo que terminan siendo solo números por ejemplo mes de 01 a 12 que no se repiten y si se pueden comparar.
Estás suponiendo que comaprar numeros y cadenas de texto es lamisma cosa, y no es así. Los sistemas no manejan ambas cosas de la misma forma (internamente), y los resultados en performance no son los mismos, en especial cuando el procesamiento abarca muchos datos.
Los numeros son valore sescalaers. Los caracteres no.
Desde el punto de vista de programación 1 <> "01", a pesar de lo que parezca. Dependiendo del DBMS, incluso, esa comparación podría disparar errores de sintaxis.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: bd, coma, correo, email, foreach, select
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 07:51.