Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

agrupar por correos

Estas en el tema de agrupar por correos en el foro de Mysql en Foros del Web. Hola, no sé muy bien como titular la pregunta asi que describiré lo mejo que pueda el problema: situación: tengo varias tablas que se enlazan ...
  #1 (permalink)  
Antiguo 30/11/2010, 07:30
 
Fecha de Ingreso: julio-2009
Mensajes: 90
Antigüedad: 14 años, 8 meses
Puntos: 4
agrupar por correos

Hola, no sé muy bien como titular la pregunta asi que describiré lo mejo que pueda el problema:

situación: tengo varias tablas que se enlazan para entregar la informacion de vencimiento de diversos documentos, la consulta en mysql la tengo, creo, bien lograda, me regresa exactamente lo que necesito pero no logro idear como manejar la información a posterior. la cosa es asi:

Código PHP:
SELECT CONCAT(nombres,' ',paterno,' ',maternonombrecompleto,  pd.descripcion documentoDATE_FORMAT(doc.vcto'%d/%m/%Y'vcto,
TO_DAYS(vcto)-TO_DAYS(CURDATE()) AS diaspd.correo
FROM documentos_conductor doc
inner join empleados emp on emp
.id_interno doc.id_empleado
inner join parametros_documentos pd on pd
.id_interno doc.id_documento
WHERE vcto 
>= DATE_SUB(CURDATE(), INTERVAL 30 DAY) AND vcto <= ADDDATE(CURDATE(), INTERVAL 30 DAY)
AND 
pd.alerta TRUE
ORDER BY pd
.correo
esta consulta me devuelve una tabla con la siguiente informacion:

nombrecompleto | documento | vcto | dias | correo
=============================================
luis | A1 | 31/10/2010 | 11 | [email protected]
luis | A2 | 31/10/2010 | -30 | [email protected]
pedro | A1 | 31/10/2010 | 3 | [email protected]
carlos | A2 | 31/10/2010 | 8 | [email protected]
juan | A3 | 31/10/2010 | 12 | [email protected]
andres | A3 | 31/10/2010 | -0 | [email protected]


o sea hasta ahi todo bien, lo que necesito es enviar un correo usando el parámetro correo de este resultado con la información relevante solo al correo indicado, es decir siguiendo el ejemplo dado necesito enviar 2 correos, uno a [email protected] con los primeros 4 vencimientos y un correo a [email protected] con los ultimos 2 vencimientos.

la parte de enviar correo la tengo resuelta con PhpMailer asi que no hay problema, de hecho armo el cuerpo del correo usando mysql_fetch_array pero no logro ingeniarmelas para separar la informacion en dos correos. no se si logro explicarme tampoco, en fin si alguien me echa una manito le prendo una velita.
__________________
C[^L*]D
[email protected]
tokkaido.blogspot.com
No hay mejor forma de aprender que enseñar
  #2 (permalink)  
Antiguo 30/11/2010, 07:57
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: agrupar por correos

prueba con group_concat.

mira el ejemplo en las faq's de mysql.
http://www.forosdelweb.com/f86/faqs-...1/#post3015306

como tu consulta es algo larga, puedes hacerlo como subconsulta para que no tengas problemas.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 30/11/2010, 08:15
 
Fecha de Ingreso: julio-2009
Mensajes: 90
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: agrupar por correos

Gracias por la respuesta tan pronta Huesos52, pero el problema no está en la consulta, creo, esta en que no se como hacer mi loop (while, for next, lo que sea) para poder separar en 2 correos (en este ejemplo en particular) la información, no se si logro explicarme bien
__________________
C[^L*]D
[email protected]
tokkaido.blogspot.com
No hay mejor forma de aprender que enseñar
  #4 (permalink)  
Antiguo 30/11/2010, 08:52
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: agrupar por correos

Tokkaido..

según entiendo, haciendo uso de group_concat podrías obtener en un solo registro agrupado por email la información referente que quieres enviar.

desde php, podrías hacer uso de explode para separar el registro que te devuelva la consulta y organizarlo graficamente como quieras.
Posterior a esto, desde php con mysql_fetch_array y un while puedes leer registro a registro y hacer un envío mendiante phpmailer.

Sin embargo, todo esto que te digo ya es problema de php y no de base de datos y te recomiendo preguntar en dicho foro para una ayuda mas profesional.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 30/11/2010, 09:35
 
Fecha de Ingreso: julio-2009
Mensajes: 90
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: agrupar por correos

tienes razón, es más una pregunta de php pero como seleccioné el subforo mysql dentro de bases de datos dentro de php pensé estar en el lugar correcto. Voy a probar con la idea que me das a ver si lo resuelvo de esa manera gracias :)
__________________
C[^L*]D
[email protected]
tokkaido.blogspot.com
No hay mejor forma de aprender que enseñar
  #6 (permalink)  
Antiguo 30/11/2010, 15:49
 
Fecha de Ingreso: julio-2009
Mensajes: 90
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: agrupar por correos

bueno, al final lo resolvi de la sigte manera: por si a alguien le sirve:

anide 2 consultas en la primera consulto por los correos:

Código:
$sql = "SELECT pd.correo from parametros_documentos pd
WHERE correo IS NOT NULL GROUP BY pd.correo"
y esto lo almaceno en un arreglo y hago una consulta por cada correo al que debo enviarle alertas:

Código PHP:
$rsdestino mysql_query($sql) or die();
    while(
$destinatario mysql_fetch_array($rsdestino)){
        
$sql "SELECT   veh.numero, veh.patente, pd.descripcion AS documento, DATE_FORMAT(dv.vcto, '%d/%m/%Y') AS vcto,
                TO_DAYS(vcto)-TO_DAYS(CURDATE()) AS dias
                FROM documentos_vehiculo AS dv
                INNER JOIN vehiculos veh ON veh.id_interno = dv.id_vehiculo
                INNER JOIN parametros_documentos pd on pd.id_interno = dv.id_documento
                WHERE vcto >= DATE_SUB(CURDATE(), INTERVAL 30 DAY) AND vcto <= ADDDATE(CURDATE(), INTERVAL 30 DAY)
                AND pd.alerta = TRUE  and pd.correo ='"
.$destinatario['correo']."';";
        
$rs mysql_query($sql) or die();
        if (
mysql_num_rows($rs) > 0) {
                        
//armo el cuerpo del correo
                      
$cuerpo "<b>vencimiento de documentos de vehiculos</b><br><br>";
            
$cuerpo .= "La siguiente es una tabla con los Nros de los vehiculos cuyos documentos han vencido y/o estan por vencer<br><br>";
            
$cuerpo .='<body>
                    <table width="740" border="1">
                    <tr>
                    <th width="95" scope="col">NUMERO</th>
                    <th width="109" scope="col">PATENTE</th>
                    <th width="317" scope="col">DOCUMENTO</th>
                    <th width="103" scope="col">VCTO</th>
                    <th width="82" scope="col">DIAS</th>
                    </tr>'
;
            while(
$filas mysql_fetch_array($rs)){
                
$cuerpo .= "<tr><td align='center'>".$filas['numero']."</td>";
                
$cuerpo .= "<td>".$filas['patente']."</td>";
                
$cuerpo .= "<td>".$filas['documento']."</td>";
                
$cuerpo .= "<td align='center'>".$filas['vcto']."</td>";
                
$cuerpo .= "<td align='center'>".$filas['dias']."</td></tr>";
            }
            
$cuerpo .="</table><br>";
enviar_correo("Aviso de vencimiento",$cuerpo,$destinatario['correo']); //y lo envio a la funcion que finalmente manda el correo 
por si le resulta util a alguien
__________________
C[^L*]D
[email protected]
tokkaido.blogspot.com
No hay mejor forma de aprender que enseñar

Etiquetas: agrupar, correos
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 08:24.