Foros del Web » Programando para Internet » PHP »

Cosultas Anidadas

Estas en el tema de Cosultas Anidadas en el foro de PHP en Foros del Web. Hola buenas, tengo que crear una consulta anidada pero nunca he trabajado con eso ni las e visto nunca. Tengo lo siguiente, una tabala A ...
  #1 (permalink)  
Antiguo 03/05/2007, 05:13
 
Fecha de Ingreso: abril-2007
Mensajes: 31
Antigüedad: 17 años
Puntos: 0
Cosultas Anidadas

Hola buenas, tengo que crear una consulta anidada pero nunca he trabajado con eso ni las e visto nunca. Tengo lo siguiente, una tabala A de la cual recojo un campo con una condicion y lo que quiero es que de los campos que a filtado en A me muestre otro que tengo en B.

Me voi a explicar mejor de A recojo los servicios que caducan dentro de 15 dias y de B quiero que me muestre el mail de los clientes a los cuales les caduca el servicio dentro de 15 dias.

Espero vuestra ayuda muchas gracias de antemano. Un saludo
  #2 (permalink)  
Antiguo 03/05/2007, 08:33
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Re: Cosultas Anidadas

Es un tema para base de datos. Igual usar subselect en mysql es posible si este es versión 4.1 o mayor.
La idea básica es:
Código:
Select 
select
    a.campo campoA,
    (select b.campo from tabla_b b where b.campoRelacion = a.otrocampoRelacion and b.fecha between $dato1 and $dato2 ) campoB
from 
    tabla_a a
where 
    a.uncampo = '$unvalor'
teóricamente también podrías usar un left, right, cross, o el join que mas te guste:

Código:
select
    a.campo campoA,
    b.campo campoB
from 
    tabla_a a
inner join tabla_b b on b.campoRelacion = a.otrocampoRelacion 
where 
    a.uncampo = '$unvalor' and b.fecha between $dato1 and $dato2
Espero que leyendo los ejemplos comprendas un poco más el tema
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #3 (permalink)  
Antiguo 03/05/2007, 08:55
 
Fecha de Ingreso: abril-2007
Mensajes: 31
Antigüedad: 17 años
Puntos: 0
Re: Cosultas Anidadas

Se me asimila a sql en acces, mas o menos lo voi entendiendo pero he oido que de esa manera no funciona a la hora de ejecutar el cron o algo asi, yo lo que quiero posteriormente de que me selecione todo eso es que mande un email a todos los que ha seleccionado eso lo se hacer pero me tengo oido que si se hace de esa forma no funciona luego lo de los email. Yo los resultados los muestro en una tabala con un $row["campo"]. A continuacion pongo la parte de código que ya tengo creada.

Código:
<?
$fecha_actual = date ("Y-m-d",mktime(0,0,0,date("m"),date("d")+15,date("Y")));
$link = mysql_connect("localhost", "alberto", "practicas") or die ("Error en la conexión");
mysql_select_db("clientes", $link) or die (mysql_error());
$sentencia= mysql_query("SELECT dominio, dvencimiento, distribuidor FROM servicios WHERE dvencimiento = '$fecha_actual'", $link) or die (mysql_error());
if ($row = mysql_fetch_array($sentencia))
{
echo "<table border = '0' align=center cellspacing=4> \n";
echo "<tr><td bgcolor=#FFBA53><font face=Verdana size=3 color=#006633><b><u>Dominio</u></b></font></td>
          <td bgcolor=#FFBA53><font face=Verdana size=3 color=#006633><b><u>Fecha Vencimiento</u></b></font></td>
		  <td bgcolor=#FFBA53><font face=Verdana size=3 color=#006633><b><u>Distribuidor</u></b></font></td>";
	do
	{
	echo "<tr><td><font face=Verdana size=3>".$row["dominio"]."</font></td>
			  <td bgcolor=#FFCC33><font face=Verdana size=3>".$row["dvencimiento"]."</font></td>
			  <td><font face=Verdana size=3>".$row["distribuidor"]."</font></td></tr>";
	}
	while ($row = mysql_fetch_array($sentencia));
	echo "</table> \n";
	}
Esp si me funciona ahora lo que me falta es que me recoja los email de otra tabala de los clientes que ha seleccionado en esta sentencia.
  #4 (permalink)  
Antiguo 03/05/2007, 09:11
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Re: Cosultas Anidadas

1- Por lo que decís con un join lo solucionas, sino podrías hacer algo como:
Código:
select 
    email
from 
    clientes
where
    id in (select idClicnte from servicios where ... )
Si no te das maña, la opción de una segunda consulta no es mala.


2- Quién te haya dicho lo del Cron te mintió, no tiene nada que ver una cosa con otra.

3- Pagina esto, usa paquetes y emails en cola, es un consejo para que no colapse nada y no haya envíos duplicados.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #5 (permalink)  
Antiguo 04/05/2007, 01:49
 
Fecha de Ingreso: abril-2007
Mensajes: 31
Antigüedad: 17 años
Puntos: 0
Re: Cosultas Anidadas

Me falataba explicar un detalle, en la primera sentecia no recojo un solo valor si no un conjunto de valores que posteriormente los muestro mediante el metodo $row["campo"] dentro de una tabla, esta tabla la tengo dentro de una sentendia if y do y la segunda sentencia la tengo que meter dentro de un if pero no se como ni que poner en el if ni nada. Facilito mçel if que ya tengo:

Código:
if ($row = mysql_fetch_array($sentencia))
{
echo "<table border = '0' align=center cellspacing=4> \n";
echo "<tr><td>
.....
.....
do
	{
	echo "<tr>
......
......
while ($row = mysql_fetch_array($sentencia));
	echo "</table> \n";
.....
A continuación deberia meter un nuevo if con la sentencia pero que pongo if (?????) que seria lo mismo que antes?

Supongo que en la condición WHERE de la segunda sentecia el campo lo podria comparar con uno de los campos que ya he sellecionado antes y podria poner $row["y el campo"]

Gracias por la ayuda.

un saludo
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 12:36.