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

Mostrar distinto dentro de 2 Tablas

Estas en el tema de Mostrar distinto dentro de 2 Tablas en el foro de Mysql en Foros del Web. Hola, espero que me puedan ayudar estoy buscando por todos lados la manera de que me muestre los resultados de una tabla que no encuentra ...
  #1 (permalink)  
Antiguo 25/08/2008, 04:23
 
Fecha de Ingreso: agosto-2008
Mensajes: 4
Antigüedad: 15 años, 8 meses
Puntos: 0
Pregunta Mostrar distinto dentro de 2 Tablas

Hola, espero que me puedan ayudar estoy buscando por todos lados la manera de que me muestre los resultados de una tabla que no encuentra en la otra.
Un ejemplo
tabla1 -> columna1
1
2
3
4

tabla2 -> columna1
3
4

quiero que muestre 1 y 2 de tabla1.columna1

he probado con:
Select tabla1.columna1 from tabla1,tabla2 where tabla1.columna1 <> tabla2.columna1

tambien he probado:
SELECT tabla1.columna1 from tabla1 where not exists(select tabla2.columna1 from tabla2)

y 20 mil cosas más sin resultado, seguro que es una chorrada pero ni tan siquiera sé como buscarlo por google.

Soy nuevo aqui, disculpen si este tema no debía de estar aqui.

Saludos y gracias!
  #2 (permalink)  
Antiguo 25/08/2008, 08:40
Avatar de Lord Kazuky  
Fecha de Ingreso: junio-2006
Ubicación: 7F.00.00.01
Mensajes: 123
Antigüedad: 17 años, 10 meses
Puntos: 5
Respuesta: Mostrar distinto dentro de 2 Tablas

SELECT tabla1.columna1 FROM tabla1 WHERE
columna1 NOT IN (SELECT tabla2.columna1 FROM tabla2)
__________________
Saludos.
"Cualquier tonto puede escribir código que un computador entiende. Los buenos programadores escriben código que los humanos pueden entender. ;)"
  #3 (permalink)  
Antiguo 26/08/2008, 01:39
 
Fecha de Ingreso: agosto-2008
Mensajes: 4
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Mostrar distinto dentro de 2 Tablas

Ante todo gracias por responderme, pero como no, me da un error, creo que me tiene mania.
La consulta la estoy haciendo desde phpmyadmin y columna1 es la clave o llave ( un ID o cod vamos... ) que quizá sea por eso...

SELECT tabla1.columna1
FROM tabla1
WHERE colmuna1 NOT
IN (


SELECT tabla2.columna1
FROM tabla2
)
LIMIT 0 , 30

MySQL ha dicho:

#1064 - You have an error in your SQL syntax near 'SELECT tabla2.columna1 FROM tabla2 ) LIMIT 0, 30 ' at line 1
  #4 (permalink)  
Antiguo 26/08/2008, 12:25
Avatar de Lord Kazuky  
Fecha de Ingreso: junio-2006
Ubicación: 7F.00.00.01
Mensajes: 123
Antigüedad: 17 años, 10 meses
Puntos: 5
Respuesta: Mostrar distinto dentro de 2 Tablas

Es WHERE colmuna1 NOT o WHERE columna1 NOT.. Aparte de eso no veo nada raro.. (o estoy muy ciego hoy. :P)

Por cierto que version de MySQL tienes? creo que estas subconsultas solo funcionan en versiones superiores a la 4.1
__________________
Saludos.
"Cualquier tonto puede escribir código que un computador entiende. Los buenos programadores escriben código que los humanos pueden entender. ;)"
  #5 (permalink)  
Antiguo 26/08/2008, 14:22
Avatar de xcars  
Fecha de Ingreso: mayo-2005
Ubicación: El Salvador
Mensajes: 753
Antigüedad: 18 años, 11 meses
Puntos: 4
Respuesta: Mostrar distinto dentro de 2 Tablas

y con left join y right join??

select * from tabla1 t1
right join tabla2 t2 on (t1.campo_id=t2.campo_id)
__________________
Con Microaplicaciones puedes hacer tu tienda en línea de forma sencilla y rápida, sin costos ocultos y con mucha responsabilidad.
  #6 (permalink)  
Antiguo 26/08/2008, 15:56
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Mostrar distinto dentro de 2 Tablas

Cita:
Iniciado por ovnicoupe Ver Mensaje
... quiero que muestre 1 y 2 de tabla1.columna1 ...
Hola,

select * from a left outer join b on a.id = b.id where b.id is null;

Todo el conjunto que se encuentre en la tabla "Master" (left join); que no esté en la tabla "Relacionada" (donde id sea nulo --- aclarando : no significa que en la tabla b sea nulo, significa que el resultado de unirlas genera un valor nulo por que no existe en la tabla "Master" ---).

Saludos,

ps:
Lo mismo de "in" pero sin sub-consultas.
SQL ANSI.

Última edición por HackmanC; 26/08/2008 a las 16:15 Razón: aclaración
  #7 (permalink)  
Antiguo 27/08/2008, 05:07
 
Fecha de Ingreso: agosto-2008
Mensajes: 4
Antigüedad: 15 años, 8 meses
Puntos: 0
Pregunta Respuesta: Mostrar distinto dentro de 2 Tablas

Daros las GRACIAS en MAYUSCULA, por vuestras respuestas !

Me quedé asombrado cuando vi que la versión de mysql era la 3 !!?? por eso me daba tantos errores en muchas consultas de este tipo, porque no se puede hacer subconsultas... en fin.. he probado

select * from a left outer join b on a.id = b.id where b.id is null;

y FUNCIONA a la perfección, pero me va muy lento al mostrarme la consulta ( tabla1 = 1500 registros aprox y tabla2 = 3800 registros aprox ) y a la hora de mostrar la página hay veces que no me la muestra entera.

Con lo que os debo de pedir ayuda nuevamente con dos preguntas.

1- Con la versión 5 y haciendo subconsultas iría más rápido?

2- Hay alguna forma en PHP de refrescar la página, supongo que no me aparecerá ( a veces ) porque se queda en caché o algo así y no puede con todo.


Gracias de antemano.
  #8 (permalink)  
Antiguo 27/08/2008, 09:45
Avatar de Lord Kazuky  
Fecha de Ingreso: junio-2006
Ubicación: 7F.00.00.01
Mensajes: 123
Antigüedad: 17 años, 10 meses
Puntos: 5
Respuesta: Mostrar distinto dentro de 2 Tablas

1.
Hay muchas cosas que cambian entre las versiones de MySQL, hay muchas mejoras, y claro que el motor se hace más eficiente para determinadas consultas.

(Más información en la pagina de MySQL)

Asi que si es posible actualizate. Eso si utiliza las mismas herramientas de MYSQL para hacer la migracion.

2.
Lo de que la pagina no se vea completa es posible que por la cantidad de registros mostrados sea tan grande que excede el limite de memoria del PHP. Entonces a veces no muestra warnings ni errores sino que simplemente corta la pagina (algunas veces me ha pasado)

Si es problema de memoria, trata de revizar bien tu script para optimizarlo y que no uses tanta memoria (reutilizar variables, liberar despues de usar y otras cosas,..)

Tambien puedes aumentar la memoria utilizada para un script con la directiva "ini_set"

ini_set("memory_limit", "256M"); // Uso 256M de memoria
ini_set("max_execution_time", "900");

Tambien hay creo una funcion para ir enviando al cliente parcialmente el HTML generado (no recuerdo cual... ahh seguro en el manual esta, o te ayudan con eso mejor en el foro PHP)
__________________
Saludos.
"Cualquier tonto puede escribir código que un computador entiende. Los buenos programadores escriben código que los humanos pueden entender. ;)"
  #9 (permalink)  
Antiguo 27/08/2008, 13:52
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Mostrar distinto dentro de 2 Tablas

Hola,

Ademas de las optimizaciones que te indica Lord Kazuky .... si "tabla1 -> columna1" y "tabla2 -> columna1" no son PK's, asegúrate que están indexadas ascendentemente (Si son PK's ya están indexadas usando InnoDB y MySQL 5).

Creo que deberías revisar los indices y la optimización del código de tu script PHP.

Saludos.

ps:

Un pequeño detalle que se me pasó por alto :

Cita:
Tambien hay creo una funcion para ir enviando al cliente parcialmente el HTML generado (no recuerdo cual... ahh seguro en el manual esta, o te ayudan con eso mejor en el foro PHP)
PHP no usa buffers por defecto ... la página se va enviando conforme se va produciendo.
Si necesitas otro comportamiento necesitas las funciones ob_xxx, etc.

Última edición por HackmanC; 27/08/2008 a las 14:21 Razón: cleanup
  #10 (permalink)  
Antiguo 27/08/2008, 22:34
Avatar de Lord Kazuky  
Fecha de Ingreso: junio-2006
Ubicación: 7F.00.00.01
Mensajes: 123
Antigüedad: 17 años, 10 meses
Puntos: 5
Respuesta: Mostrar distinto dentro de 2 Tablas

Sip ya me documente mejor :P.

Por ejemplo:

Código PHP:
ob_start(); //Abrimos el buffer
echo "Texto que enviaremos al cliente"
setcookie ("nombre""valor"); 
ob_end_flush(); //Vaciamos el buffer 
Desde que se abre el buffer, no se imprime nada (con echo) hasta que no se vacie o envie parcialmente el buffer.

Sin embargo, ese buffer solo trabaja con las salidas tipo 'echo' que se escriban hacia el navegador.

Pero si tu (ovnicoupe) estas creando tu propio buffer, es decir una variable donde almacenas el HTML generado con el resultado de la consulta, pues podría pasar lo que digo. Que esa variable se llene hasta el tope.

Pero bueno, esto ya otro tema. Primero verifica todo en la BD y que la consulta te funcione bien. Luego si al PHP.
__________________
Saludos.
"Cualquier tonto puede escribir código que un computador entiende. Los buenos programadores escriben código que los humanos pueden entender. ;)"
  #11 (permalink)  
Antiguo 12/09/2008, 04:45
 
Fecha de Ingreso: agosto-2008
Mensajes: 4
Antigüedad: 15 años, 8 meses
Puntos: 0
De acuerdo Respuesta: Mostrar distinto dentro de 2 Tablas

Muchas gracias a todos!
El problema más o menos se ha solucionado, sigo con la version 3 de Mysql pero a veces me muestra parcialmente la página.
Le he introducido todo esto en la cabecera

<?php header("Cache-Control: no-cache, must-revalidate"); ?>
<?php
ini_set("memory_limit", "256M");
ini_set("max_execution_time", "900");
?>

y luego un código llamado flush(); en algunas zonas


Pero bueno el problema que tengo ahora viene por otro tema.

Nuevamente gracias
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 02:49.