Foros del Web » Programando para Internet » PHP »

Excluir registros comparando 2 tablas (subconsultas)

Estas en el tema de Excluir registros comparando 2 tablas (subconsultas) en el foro de PHP en Foros del Web. Hola amigos, vuelvo a pedir ayuda después de darle mil vueltas al tema. Necesitaría saber el script para excluir (no mostrar) los registros de la ...
  #1 (permalink)  
Antiguo 17/11/2005, 12:09
 
Fecha de Ingreso: julio-2005
Mensajes: 12
Antigüedad: 12 años, 4 meses
Puntos: 0
De acuerdo Excluir registros comparando 2 tablas (subconsultas)

Hola amigos, vuelvo a pedir ayuda después de darle mil vueltas al tema.

Necesitaría saber el script para excluir (no mostrar) los registros de la tabla1 cuyo ID coincide con un campo de la tabla2 (clave). Igual lo entendeis mejor con el script que yo he intentado y que no me ha dado resultado:

"select * from tabla1 WHERE ((ID like '10%') and (ID NOT EXISTS (Select clave FROM tabla2 WHERE condicion= '2' ))) "

AGRADECERÍA CUALQUIER SUGERENCIA

Última edición por didlem; 18/11/2005 a las 19:22 Razón: Me dieron una solución
  #2 (permalink)  
Antiguo 17/11/2005, 13:34
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
Código:
SELECT * FROM tabla1 WHERE ID LIKE '10%' and ID NOT IN (SELECT clave FROM tabla2 WHERE condicion= '2' )
  #3 (permalink)  
Antiguo 17/11/2005, 14:43
 
Fecha de Ingreso: julio-2005
Mensajes: 12
Antigüedad: 12 años, 4 meses
Puntos: 0
ESE CODIGO TAMPOCO FUNCIONA. POR LO MENOS A LA HORA DE MOSTRAR LOS RESULTADOS DE LA SIGUIENTE FORMA.

while ($row = mysql_fetch_row($QUERRY)) {echo $row[0];}


¿¿ALGUNA OTRA SUGERENCIA??
  #4 (permalink)  
Antiguo 17/11/2005, 14:47
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
¿Puedes mostrar un poco mas del codigo que estas usando e indicar algun error que te arroje al ejecutar el script?
  #5 (permalink)  
Antiguo 17/11/2005, 14:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Lo primero es que pruebes tu consulta SQL .-a parte- .. no sé si usas algún administrador de Mysql como phpMyadmin o cualquier otro. Eso te ayudará mucho a descartar problemas con PHP o de SQL y sobre todo a "afinar" tu consulta SQL con lo que realmente necesitas.

Por lo demás .. si estás seguro que esa es tu consulta SQL adecuada y has tenido oportunidad de testearla para ver que realmente te arroja resultados, ... pon el código -completo- que usastes para problarlo .. no sabemos si estás aplicando correctamente PHP.

Un saludo,
  #6 (permalink)  
Antiguo 17/11/2005, 16:04
 
Fecha de Ingreso: julio-2005
Mensajes: 12
Antigüedad: 12 años, 4 meses
Puntos: 0
NO ME DA NINGÚN ERROR, EL PROBLEMA ES QUE NO ME DEVUELVE NINGÚN RESULTADO Y NO DEBERÍA DE SER ASÍ.

De manera gráfica sería algo así:

Tabla1 - Jugadores:
ID | NOMBRE | APELLIDOS
09 | ivan | medina
11 | juan | perez
12 | pedro | ramirez
13 | alberto | suarez

Tabla2 - Partidos:
IDPARTIDO | IDJUGADOR | GOLES
1 | 11 | 1
1 | 12 | 0
2 | 11 | 1

SI HAGO LAS CONSULTAS POR SEPARADO SI ME DEVUELVE LOS REGISTROS
$consulta1=mysql_query("Select idjugador FROM Partidos WHERE idpartido = '1'",$link);
resultado_consulta1= 11, 12

$consulta2=mysql_query("select * from Jugadores WHERE ID > '10'",$link);
resultado_consulta2=11 | juan | perez , 12 | pedro | ramirez, 13 | alberto | suarez

Lo que quiero es que busque los jugadores con ID > 10 que no están en la tabla PARTIDOS cuando indico un valor de partido. En definitiva, la tabla partidos contiene los jugadores que han jugado y con esta consulta, lo que pretendo es que me indique quienes no han jugado ese partido.

$jugadores=mysql_query("select * from Jugadores WHERE ID >'10' and ID NOT IN (Select idjugador FROM Partidos WHERE idpartido = '1')",$link);

Para mostrar los resultados:
while ($row = mysql_fetch_row($jugadores))
{echo "<tr><td>$row[1]</td>
<td>$row[2]</td></tr>";}

Se supone que como resultado me debería de dar:
alberto | suarez
que es el único jugador con id mayor que 10 que no ha jugado el partido 1.

  #7 (permalink)  
Antiguo 18/11/2005, 05:11
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero insisto .. tu has probado tu consulta SQL en algún administrador de Mysql? ...

¿Que versión de Mysql usas?.. (por qué estás intentando hacer sub-consultas y eso no es válido para todas las versiones de Mysql .. )

Consulta en el foro de Base de datos por la mejor consulta SQL para tu caso .. realmente cuando la tengas clara vas a obtener sus resultados como simpre lo haces para otro tipo de consultas SQL más simples vía PHP.

Un saludo,

PD: confirma si has probado tu consulta SQL y obtienes lo que requieres por lo menos para descartar problemas de SQL y sino .. solicita que te movamos el mensaje al foro de Base de datos que es el adecuado para este tipo de consultas.
  #8 (permalink)  
Antiguo 18/11/2005, 06:25
 
Fecha de Ingreso: julio-2005
Mensajes: 12
Antigüedad: 12 años, 4 meses
Puntos: 0
El problema al parecer es la versión Mysql que está instalada en el servidor.
Es la MySQL 4.0.26, supongo que tendré que esperar hasta que hagan la actualización
  #9 (permalink)  
Antiguo 18/11/2005, 07:17
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por didlem
El problema al parecer es la versión Mysql que está instalada en el servidor.
Es la MySQL 4.0.26, supongo que tendré que esperar hasta que hagan la actualización
Parece que si .. pero tampoco es mi fuerte ese nivel de SQL ..

Te recomiendo preguntar en foro de Base de datos (aportando tu ejemplo de la respuesta #6) sobre alguna alternativa para realizar lo mismo bajo la versión de Mysql que usas.

Un saludo,
  #10 (permalink)  
Antiguo 18/11/2005, 19:20
 
Fecha de Ingreso: julio-2005
Mensajes: 12
Antigüedad: 12 años, 4 meses
Puntos: 0
De acuerdo Ya tengo solución

Por si a alguien le puede servir, aquí os pongo la solución que HARON me han dado en el foro "Bases de datos".

select j.*
from Jugadores j
left join Partidos p
on p.idpartido = '1'
and p.idjugador = j.id
where j.id >'10'
and p.idpartido is null



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 06:22.