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

Where not exist

Estas en el tema de Where not exist en el foro de Mysql en Foros del Web. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original "SELECT fotos.id _ foto as foto, usuarios.fid _ usuario as fid _ usuario, usuarios.nombre _ usuario as nombre _ ...
  #1 (permalink)  
Antiguo 23/02/2012, 21:19
Avatar de VbOkonly  
Fecha de Ingreso: julio-2009
Ubicación: San Justo, Buenos Aires, Argentina
Mensajes: 490
Antigüedad: 14 años, 9 meses
Puntos: 5
Where not exist

Código MySQL:
Ver original
  1. "SELECT fotos.id_foto as foto, usuarios.fid_usuario as fid_usuario, usuarios.nombre_usuario as nombre_usuario, fotos.link_foto as link_foto FROM fotos, usuarios WHERE usuarios.fid_usuario = fotos.pertenecea_foto AND usuarios.check_usuario = 1 AND NOT EXIST(SELECT a_interaccion FROM interaccion WHERE de_interaccion = ".$_SESSION['fid_username']." AND a_interaccion = ".$per.") ORDER BY fotos.id_foto DESC LIMIT $RegistrosAEmpezar, $RegistrosAMostrar"

No funciona desde que puse
Código MySQL:
Ver original
  1. NOT EXIST(SELECT a_interaccion FROM interaccion WHERE de_interaccion = ".$_SESSION['fid_username']." AND a_interaccion = ".$per."

Quiero agregarle a esa consulta que cuando no exista la igualdad se efectue, si existe la igualdad que no la haga, el reto de este codigo esta en donde ubicar ese not exist, sinceramente lo que se de sql lo aprendi solo y no es mi fuerte sinceramente pero bueno lo intente jajaja

gracias de antemano!
__________________
Mi primera web: http://www.mascoteame.com

Última edición por VbOkonly; 23/02/2012 a las 22:50
  #2 (permalink)  
Antiguo 24/02/2012, 03:19
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Where not exist

Qué resultados esperas obtener? Para qué utilizas not exists, casi seguro que puedes resolverlo normalmente con un WHERE. Postea las tablas y el resultado esperado. Saludos
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 24/02/2012, 03:30
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Where not exist

Código MySQL:
Ver original
  1. SELECT fotos.id_foto as foto,
  2.              usuarios.fid_usuario as fid_usuario,
  3.              usuarios.nombre_usuario as nombre_usuario,
  4.              fotos.link_foto as link_foto
  5. FROM fotos, usuarios
  6. WHERE usuarios.fid_usuario = fotos.pertenecea_foto
  7. AND usuarios.check_usuario = 1
  8. AND NOT EXIST(SELECT a_interaccion
  9.                             FROM interaccion
  10.                             WHERE de_interaccion = ".$_SESSION['fid_username']."
  11.                             AND a_interaccion = ".$per.")
  12. ORDER BY fotos.id_foto DESC LIMIT $RegistrosAEmpezar, $RegistrosAMostrar

(asi se puede leer)


Manual
12.2.9.6. Subqueries with EXISTS or NOT EXISTS

creo que el problema es que la sub-query no depende de la query principal

Código MySQL:
Ver original
  1. SELECT fotos.id_foto as foto,
  2.              usuarios.fid_usuario as fid_usuario,
  3.              usuarios.nombre_usuario as nombre_usuario,
  4.              fotos.link_foto as link_foto
  5. FROM fotos INNER JOIN usuarios
  6. ON  usuarios.fid_usuario = fotos.pertenecea_foto
  7. AND usuarios.check_usuario = 1
  8. AND usuarios.nombre_usuario=".$_SESSION['fid_username']."
  9. AND NOT EXIST(SELECT a_interaccion
  10.                             FROM interaccion
  11.                             WHERE de_interaccion =  usuarios.nombre_usuario
  12.                             AND a_interaccion = ".$per.")
  13. ORDER BY fotos.id_foto DESC LIMIT $RegistrosAEmpezar, $RegistrosAMostrar

No puedo deducir que hay en $per....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #4 (permalink)  
Antiguo 24/02/2012, 10:02
Avatar de VbOkonly  
Fecha de Ingreso: julio-2009
Ubicación: San Justo, Buenos Aires, Argentina
Mensajes: 490
Antigüedad: 14 años, 9 meses
Puntos: 5
Respuesta: Where not exist

Hola, gracias por responder.
En $per se encuentra el numero de persona a consultar, el codigo sirve para que se voten personas, osea yo juan_pepito vote a maria, la proxima vez que vuelva a votar gente quiero que se muestren todos excepto maria (porque ya la vote), en este caso puede ser maria, agustina, macarena y todos los que ya vote, no quiero mostrar las personas que vote sino las que NO vote.

$per es la persona, en este caso seria maria que lleva un id
__________________
Mi primera web: http://www.mascoteame.com
  #5 (permalink)  
Antiguo 25/02/2012, 14:19
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Where not exist

Entonces primero identifica a los que votaste, por ejemplo

select user_id from users where ....

Luego, metes esa consulta dentro de la otra con not in

select * from users where ... AND user.id NOT IN (aqui la select anterior);

Atención, la subselect debe seleccionar sólo el campo por el que vas a comparar en la select principal. O sea, si la principal es AND user.id not in ... luego la subselect debe obtener sólo el campo user.id

A ver si sirve, saludos
__________________
Fere libenter homines, id quod volunt, credunt.
  #6 (permalink)  
Antiguo 29/02/2012, 20:26
Avatar de VbOkonly  
Fecha de Ingreso: julio-2009
Ubicación: San Justo, Buenos Aires, Argentina
Mensajes: 490
Antigüedad: 14 años, 9 meses
Puntos: 5
Respuesta: Where not exist

Hola, algo asi?

Código MySQL:
Ver original
  1. SELECT fotos.pertenecea_foto as pertenecea_foto,
  2.  usuarios.fid_usuario as fid_usuario,
  3.  usuarios.nombre_usuario as nombre_usuario,
  4.  fotos.link_foto as link_foto FROM fotos, usuarios
  5. WHERE usuarios.fid_usuario = fotos.pertenecea_foto
  6. AND usuarios.check_usuario = 1
  7. AND usuarios.fid_usuario
  8. NOT IN(SELECT * FROM interaccion, usuarios
  9. WHERE interaccion.de_interaccion = usuarios.fid_usuario
  10. AND interaccion.de_interaccion = '".$_SESSION['fid_username']."')
  11. ORDER BY fotos.id_foto DESC
  12. LIMIT $RegistrosAEmpezar, $RegistrosAMostrar

saque cosas que no iban en la consulta para hacerla mas ligera y lograr lo mismo, sin embargo me arroja este error.

Operand should contain 1 column(s)

interaccion:

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `interaccion` (
  2.   `id_interaccion` int(11) NOT NULL AUTO_INCREMENT,
  3.   `de_interaccion` int(11) NOT NULL,
  4.   `a_interaccion` int(11) NOT NULL,
  5.   `valor_interaccion` int(11) NOT NULL,
  6.   PRIMARY KEY (`id_interaccion`)
  7. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci AUTO_INCREMENT=542 ;

fotos:

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `fotos` (
  2.   `id_foto` int(11) NOT NULL AUTO_INCREMENT,
  3.   `link_foto` text COLLATE latin1_spanish_ci NOT NULL,
  4.   `link_foto_thumb` text COLLATE latin1_spanish_ci NOT NULL,
  5.   `link_foto_original` text COLLATE latin1_spanish_ci NOT NULL,
  6.   `pertenecea_foto` int(11) NOT NULL,
  7.   `fecha_foto` varchar(255) COLLATE latin1_spanish_ci NOT NULL,
  8.   PRIMARY KEY (`id_foto`)
  9. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci AUTO_INCREMENT=100 ;

usuarios:

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `usuarios` (
  2.   `id_usuario` int(11) NOT NULL AUTO_INCREMENT,
  3.   `fid_usuario` int(11) NOT NULL,
  4.   `nombrecompleto_usuario` varchar(255) COLLATE latin1_spanish_ci NOT NULL,
  5.   `nombre_usuario` varchar(255) COLLATE latin1_spanish_ci NOT NULL,
  6.   `apellido_usuario` varchar(255) COLLATE latin1_spanish_ci NOT NULL,
  7.   `email_usuario` varchar(255) COLLATE latin1_spanish_ci NOT NULL,
  8.   `nacimiento_usuario` varchar(255) COLLATE latin1_spanish_ci NOT NULL,
  9.   `sexo_usuario` tinyint(1) NOT NULL,
  10.   `from_usuario` varchar(255) COLLATE latin1_spanish_ci NOT NULL,
  11.   `check_usuario` tinyint(1) NOT NULL DEFAULT '0',
  12.   PRIMARY KEY (`id_usuario`)
  13. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci AUTO_INCREMENT=40 ;

bueno, voy de nuevo asi les refresco jajaja, es algo tipo badoo, donde se muestran fotos de personas y se vota, bueno, en interaccion se vuelcan los datos del foto, en fotos se muestran las fotos y en usuarios se comparan los id para obtener el nombre.

Por ejemplo si yo voto a maria de 1 a 3 quiero que la proxima vez que navegue por la pagina que se muestran todas las personas, maria no aparesca porque ya la vote... Y asi con todos!
__________________
Mi primera web: http://www.mascoteame.com

Última edición por VbOkonly; 29/02/2012 a las 21:14
  #7 (permalink)  
Antiguo 01/03/2012, 02:25
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Where not exist

usuarios.fid_usuario NOT IN(SELECT * FROM

NOT IN o IN requiere una subconsulta con un solo campo no con *
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #8 (permalink)  
Antiguo 01/03/2012, 04:05
Avatar de VbOkonly  
Fecha de Ingreso: julio-2009
Ubicación: San Justo, Buenos Aires, Argentina
Mensajes: 490
Antigüedad: 14 años, 9 meses
Puntos: 5
Respuesta: Where not exist

sii, funciono!!!, con razon me daba mal si estaba queriendo mostrar todos jajaja, este es el codigo funcional:

Código MySQL:
Ver original
  1. SELECT fotos.pertenecea_foto as pertenecea_foto, usuarios.fid_usuario as fid_usuario, usuarios.nombre_usuario as nombre_usuario, fotos.link_foto as link_foto FROM fotos, usuarios
  2. WHERE usuarios.fid_usuario = fotos.pertenecea_foto
  3. AND usuarios.check_usuario = 1
  4. AND usuarios.fid_usuario
  5. NOT IN(SELECT interaccion.a_interaccion FROM interaccion, usuarios WHERE interaccion.de_interaccion = usuarios.fid_usuario AND interaccion.de_interaccion = '".$_SESSION['fid_username']." AND a_interaccion = $PagAct')
  6. ORDER BY fotos.id_foto DESC LIMIT $RegistrosAEmpezar, $RegistrosAMostrar

me costo..

Gracias a todos!, karma para todos!
__________________
Mi primera web: http://www.mascoteame.com
  #9 (permalink)  
Antiguo 01/03/2012, 06:39
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Where not exist

Ahora ando un poco ocupado, pero la cosa sería así, comprueba la sintaxis exacta para tus tablas:


Código MySQL:
Ver original
  1. #las personas que no votaste salen de  todos - votados, por tanto los NO votados son:SELECT
  2.   U.id_usuario
  3. FROM usuarios U
  4. WHERE id_usuario NOT IN(SELECT
  5.                           ITE.a_interaccion
  6.                         FROM interaccion ITE
  7.                         WHERE ITE.de_interaccion = 'MI NUMERO DE USUARIO');
  8. #Ahora el resto de la info para los no votados sería
  9.   F.pertenecea_foto,
  10.   U.fid_usuario,
  11.   U.nombre_usuario,
  12.   F.link_foto
  13. FROM fotos F
  14.   LEFT JOIN usuarios U ON (U.fid_usuario = F.pertenecea_foto) AND U.check_usuario = 1
  15. WHERE U.fid_usuario IN(SELECT
  16.                          UU.id_usuario
  17.                        FROM usuarios UU
  18.                        WHERE id_usuario NOT IN(SELECT
  19.                                                  ITE.a_interaccion
  20.                                                FROM interaccion ITE
  21.                                                WHERE ITE.de_interaccion = 'MI NUMERO DE USUARIO'))
  22. ORDER BY F.id_foto DESC

Sólo te interesa la segunda select.
__________________
Fere libenter homines, id quod volunt, credunt.

Etiquetas: exist, registros, select
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 09:38.