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

Consulta SQL compleja uniendo tablas...

Estas en el tema de Consulta SQL compleja uniendo tablas... en el foro de Mysql en Foros del Web. Hola, estoy volviéndome un poco "loco" ya que no soy capaz de realizar un consulta que me relacione 2 tablas, pero se forma excluyente. Digamos ...
  #1 (permalink)  
Antiguo 06/11/2010, 11:37
Avatar de Pentaxeros  
Fecha de Ingreso: mayo-2008
Mensajes: 173
Antigüedad: 16 años
Puntos: 3
Consulta SQL compleja uniendo tablas...

Hola, estoy volviéndome un poco "loco" ya que no soy capaz de realizar un consulta que me relacione 2 tablas, pero se forma excluyente.

Digamos que tengo:
Tabla A (Fotos):
ID - Nombre Foto
1 - aaaaa
2 - bbbbb
3 - cccccc
4 - ddddd

Tabla B (Votos)
ID - Quien
1 - manolo
1 - paco
1 - benito
2 - manolo
3 - paco
3 - manolo
3 - luis
3 - elvis

Pues lo que quiero es hacer un listado de la tabla 1 que en en la tabla 2 por ejemplo "quien" != paco.

Ejemplo
Listado de la tabla "a" de fotos que no haya sido votada por paco
por lo que debería listar
2 - bbbbb
4 - ddddd

He probado con INNER JOIN a unirlas por el campo ID, y que en la tabla B el campo B fuera != de X, pero el problema es que el la tabla B como existen mas elementos con el ID correspondiente que cumplen el criterio, pues me lista siempre toda la tabla A completa sin excluir las filas que debería excluir...

No soy muy experto en SQL, pero me defiendo, y esto me esta costando.

Puedo hacer una consulta de toda la tabla a, y hacer un blucle que recorra la tabla, buscando en la b, y si encuentra en la b, que ignore el resultado, pero creo que puede ser muy pesado para el servidor...

Para que quede mas claro, la tabla A es un listado de fotografías, y la tabla B, es donde registro quien ha votado las fotografías.
Lo que quiero es poder hacer un listado de fotografías que un usuario no haya votado...

Muchas gracias por la ayuda...

Última edición por Pentaxeros; 06/11/2010 a las 11:38 Razón: corregir errores
  #2 (permalink)  
Antiguo 06/11/2010, 14:29
Avatar de Pentaxeros  
Fecha de Ingreso: mayo-2008
Mensajes: 173
Antigüedad: 16 años
Puntos: 3
Respuesta: Consulta SQL compleja uniendo tablas...

Bueno, he avanzado algo, os pongo mas informacion a ver si voy por buen camino y si consigue alguien ayudarme:

Este es el select que he realizado.

SELECT `fotografias`.`IDFOTO`, GROUP_CONCAT(`cuenta`.`usuario`) as `votacion` FROM `fotografias`
INNER JOIN `cuenta` ON (`fotografias`.`IDFOTO` = `cuenta`.`IDFOTO`)
WHERE `fotografias`.`USUARIO` = 'ANONIMO'
AND `fotografias`.`FOROBOARD` != 0
GROUP BY `fotografias`.`IDFOTO` ORDER BY `fotografias`.`IDFOTO`

Y las tablas son fotografías que es el listado de fotografias, y cuenta que es donde esta los usuarios que han votado.

Eso me muestra una listado de fotos con un campo que muestra los nombres de los que han votado que se llama votacion

Ahora quiero que me filtre y no muestre los registros que dentro de votacion contengan un nombre...

Si añado despues del WHERE esto:
AND `votacion` != '%Paco%'

me dice:
#1054 - Unknown column 'votacion' in 'where clause'

Y si uso:
AND GROUP_CONCAT(`cuenta`.`usuario`)!='%Paco%'

me dice:
#1111 - Invalid use of group function

Asi que ahora estoy atascado en este segundo paso...

Por favor un poco de ayuda...

Saludos...
  #3 (permalink)  
Antiguo 06/11/2010, 14:53
Avatar de Pentaxeros  
Fecha de Ingreso: mayo-2008
Mensajes: 173
Antigüedad: 16 años
Puntos: 3
Respuesta: Consulta SQL compleja uniendo tablas...

Bueno, investigando y con la ayuda de Google parece que he dado con la solucion, y aqui la dejo puesta por si en el futuro le sirve a alguien:

SELECT `fotografias`.`IDFOTO` , GROUP_CONCAT( `cuenta`.`usuario` ) AS `votacion`
FROM `fotografias`
INNER JOIN `cuenta` ON ( `fotografias`.`IDFOTO` = `cuenta`.`IDFOTO` )
WHERE `fotografias`.`USUARIO` = 'ANONIMO'
AND `fotografias`.`FOROBOARD` !=0
GROUP BY `fotografias`.`IDFOTO`
HAVING GROUP_CONCAT( `cuenta`.`usuario` ) NOT LIKE '%Paco%'

Saludos...
  #4 (permalink)  
Antiguo 06/11/2010, 15:36
Avatar de Pentaxeros  
Fecha de Ingreso: mayo-2008
Mensajes: 173
Antigüedad: 16 años
Puntos: 3
Respuesta: Consulta SQL compleja uniendo tablas...

Vaya, parece que tengo algo nuevo a afinar... y vuelvo a pedir ayuda a ver si alguien esta vez me lo dice..., je je je...

El problema es que cuando alguna `fotografias`.`IDFOTO` no encuentra ninguna `cuenta`.`IDFOTO` no me las lista... y eso es un problema,. ya que si nadie ha votado me la tiene que seguir listando... asi que debo ver que me liste todas las `fotografias`.`IDFOTO` independientemente que tenga su pareja asociada con INNER JOIN `cuenta`
  #5 (permalink)  
Antiguo 06/11/2010, 17:26
Avatar de Pentaxeros  
Fecha de Ingreso: mayo-2008
Mensajes: 173
Antigüedad: 16 años
Puntos: 3
Respuesta: Consulta SQL compleja uniendo tablas...

La solución usar LEFT JOIN en lugar de INNER JOIN...

Saludos...

Etiquetas: sql, tablas
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 17:40.