Foros del Web » Programando para Internet » PHP »

consulta de dos tablas

Estas en el tema de consulta de dos tablas en el foro de PHP en Foros del Web. Hola a todos!! Alguien podría decirme si hay algún error en la siguiente consulta? "select DNI from cliente, datos where dni=DNICliente and dni not in ...
  #1 (permalink)  
Antiguo 29/06/2006, 04:14
 
Fecha de Ingreso: febrero-2006
Mensajes: 297
Antigüedad: 11 años, 9 meses
Puntos: 1
Pregunta consulta de dos tablas

Hola a todos!!

Alguien podría decirme si hay algún error en la siguiente consulta?

"select DNI from cliente, datos where dni=DNICliente and dni not in (select DNICliente from datos where fecha='$fecha')";

quiero seleccionar los dnis de los clientes cuyo dni no se encuentre en la tabla datos con la fecha indicada.
Me da un error pero no se porque
  #2 (permalink)  
Antiguo 29/06/2006, 06:48
 
Fecha de Ingreso: mayo-2006
Mensajes: 23
Antigüedad: 11 años, 6 meses
Puntos: 1
mira la versión de mysql que tienes, hasta hace poco no se podian hacer subconsultas. mira que versiones te dejan hacerlo y la instalas pero una manera sencilla de hacerlo es con bucles, un saludo
  #3 (permalink)  
Antiguo 29/06/2006, 07:11
 
Fecha de Ingreso: febrero-2006
Mensajes: 297
Antigüedad: 11 años, 9 meses
Puntos: 1
Gracias jorgemon69, he estado mirando y es verdad lo de que no admite subconsultas. No se me había ocurrido, asi que tendré que cambiar la manera de hacerlo.
Como sería eso de los bucles?
  #4 (permalink)  
Antiguo 29/06/2006, 07:17
Avatar de chuscazo  
Fecha de Ingreso: abril-2004
Mensajes: 84
Antigüedad: 13 años, 7 meses
Puntos: 0
Ademas creo que la sentencia esta mal, te falta decirle a que tabla corresponden esos campos, seria asi, creo:

"select DNI.tabla from cliente, datos where dni.tabla=DNI.tabla and dni.tabla not in (select DNI from datos where fecha='$fecha')";# sustituyendo tabla por la tabla a la que pertenece el campo

Si lo que te pasaba era esto te saldria un error parecido a este <i>Column: 'nombre_campo' in field list is ambiguous</i>

Creo que asi si funcionaria, si te lo permite el mysql.
Si no puedes actualizar el mysql mirate estos link:

http://dev.mysql.com/doc/mysql/en/re...ubqueries.html
http://dev.mysql.com/doc/mysql/en/an...ubqueries.html

Suerte
  #5 (permalink)  
Antiguo 30/06/2006, 06:32
 
Fecha de Ingreso: mayo-2006
Mensajes: 23
Antigüedad: 11 años, 6 meses
Puntos: 1
$sql=select DNI from cliente;
$res=mysql_db_query(bd,$sql);
while($v=mysql_fetch_array($res))
{
$sql2= select DNICliente from datos where fecha='$fecha';
$res2=mysql_db_query(bd,$sql2);
$esta='no';
while($v2=mysql_fetch_array($res2))
{
if($v[DNI]==$v2[DNICliente])
{
$esta='si';
}
}
if($esta=='no')
{
$valoresbuscados[]=$v[DNI];
}
}

Te explico esta manera que no es lamejor pero te puede funcionar:

Recorres las tablas sacando todos los valores, si el resultado de $v[dni] y $v2[dni] coinciden es que está en las dos tablas porl o que no lo queremos, si no es asi, lo guardamos en el array $valoresbuscados, para sacar los valores recorres el array y ya está. No se si me he explicado bien, es que no tengo manera de profesor, si no te he resuelto la duda dilo y que te eche un cavle alguien que sepa mas,

Última edición por jorgemon69; 07/08/2006 a las 01:57
  #6 (permalink)  
Antiguo 30/06/2006, 07:35
 
Fecha de Ingreso: febrero-2006
Mensajes: 297
Antigüedad: 11 años, 9 meses
Puntos: 1
Ya lo entendí muchisimas gracias!! Probaré con ello.
Saludos
  #7 (permalink)  
Antiguo 30/06/2006, 07:52
Avatar de chuscazo  
Fecha de Ingreso: abril-2004
Mensajes: 84
Antigüedad: 13 años, 7 meses
Puntos: 0
Esa es una buena solucion si tus tablas no van a tener muchos registros.

Si tus tablas se hacen muy grandes esta soluccion tendra un coste temporal mayor (no se si de recursos, creo que tambien porque tienes que cargar los 2 objetos de mysql). Si te pasa esto y quieres ganar algo de velocidad sera mejor que utilices joins para sustituir la consulta anidada.

Saludos
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 15:00.