Foros del Web » Programando para Internet » PHP »

Consulta compleja MySQL

Estas en el tema de Consulta compleja MySQL en el foro de PHP en Foros del Web. Hola a todos, tengo un problema algo dificil de explicar y no se muy bien como hacerlo, a ver si vosotros me podeis ayudar :S ...
  #1 (permalink)  
Antiguo 09/03/2012, 06:37
 
Fecha de Ingreso: septiembre-2009
Ubicación: España
Mensajes: 136
Antigüedad: 14 años, 7 meses
Puntos: 0
Consulta compleja MySQL

Hola a todos, tengo un problema algo dificil de explicar y no se muy bien como hacerlo, a ver si vosotros me podeis ayudar :S

Tengo una tabla que se llamaba 'lista_completa' en la que se encuentran un listado con frases.

Bien pero ahora quiero que se puedan bloquear algunas frases, hay otra tabla que se llama 'lista_bloqueados' en la que si yo añadiese por ejemplo el ID de una fila de la tabla 'lista_completa' este se omitiese del resultado.
Es necesario que sea asi...
¿Como podria hacerlo? Es que no se por donde empezar

Muchas gracias, un saludo!
  #2 (permalink)  
Antiguo 09/03/2012, 06:43
Avatar de OsSk4R  
Fecha de Ingreso: octubre-2006
Ubicación: $this->home
Mensajes: 824
Antigüedad: 17 años, 6 meses
Puntos: 74
Respuesta: Consulta compleja MySQL

Puedes usar la misma tabla y tan solo agregar un campo llamado "bloqueado" y para las frases que quieras bloquear añades el valor de 1, y aquellas que tengan el valor de 0 querrá decir que no estan bloqueadas.

Luego, en la consulta haces así por ejemplo:
SELECT * FROM tu_tabla WHERE bloqueado = '0'

De esa manera sacaria las frases no bloqueadas.

Saludos,
  #3 (permalink)  
Antiguo 09/03/2012, 06:55
 
Fecha de Ingreso: septiembre-2009
Ubicación: España
Mensajes: 136
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Consulta compleja MySQL

Gracias por responder, pero es que el problema es que eso lleva un sistema de usuarios incorporado, entonces otro usuario puede bloquear la frase de otro. Tiene que ser si o si con la estructura que puse
  #4 (permalink)  
Antiguo 09/03/2012, 07:44
 
Fecha de Ingreso: febrero-2012
Mensajes: 28
Antigüedad: 12 años, 1 mes
Puntos: 2
Respuesta: Consulta compleja MySQL

Añades otra tabla que se llame lista_bloqueada. En esta nueva tabla pones id usuario referenciada a tabla usuarios, id lista_completa referenciada a lista_completas y cuando quieras bloquear una frase a un usuario creas ahí el registro. Después haces un select * from lista_bloqueada where id_usuario = pepe y haces otro select * from lista_completa recorres ambas tablas y muestras solo si no está en lista_bloqueada.

Es algo así lo que buscas?
  #5 (permalink)  
Antiguo 09/03/2012, 08:07
 
Fecha de Ingreso: septiembre-2009
Ubicación: España
Mensajes: 136
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Consulta compleja MySQL

Gracias por responder, si, asi es, pero no se como hacerlo...
  #6 (permalink)  
Antiguo 09/03/2012, 08:54
Avatar de OsSk4R  
Fecha de Ingreso: octubre-2006
Ubicación: $this->home
Mensajes: 824
Antigüedad: 17 años, 6 meses
Puntos: 74
Respuesta: Consulta compleja MySQL

Entonces creo que deberías empezar por lo básico. Leer sobre PHP o leer más y también leer sobre MySQL. Lo que pides es fácil por tanto con saber un poco de php y mysql lo consigues. Eso sí, a base de práctica.

x3xtres te ha dado la idea de como implementarlo, ahora tú eres el que lo tienes que programar.
Intentalo y si tienes dudas ya sabes

Saludos
  #7 (permalink)  
Antiguo 09/03/2012, 09:01
 
Fecha de Ingreso: septiembre-2009
Ubicación: España
Mensajes: 136
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Consulta compleja MySQL

Pero si se mucho de PHP y MySQL solo que no se como omitir de la respuesta las frases bloqueadas T.T
pense en un bucle con todas las frases del usuario y con un condicional decir si esa frase continua o no... Pero quiero saber si hay una alternativa mejor (mas rapida o optimizada)

Que opinas del bucle con condicional? Hay una alternativa mejor? *^*

Gracias por ayudarme!:D
  #8 (permalink)  
Antiguo 09/03/2012, 10:03
 
Fecha de Ingreso: febrero-2012
Mensajes: 28
Antigüedad: 12 años, 1 mes
Puntos: 2
Respuesta: Consulta compleja MySQL

Podrías hacerlo a lo ganso con un par de bucles con un condicional. O ya utilizando funciones de arrays para comparar. Googleando un poco he visto algo que quizás te sirve.

Haces un select id de ambas tablas ( la bloqueada y la normal ) y lo guardas en 2 variables. Después con la función array_dif() las comparas y te devolverá en una tercera variable los valores diferentes. Y para terminar haces un select * from lista_completa where id = $array_diferente.

http://www.php.net/manual/es/function.array-diff.php ahí tienes el link a la función que menciono. Un saludo
  #9 (permalink)  
Antiguo 09/03/2012, 10:15
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Respuesta: Consulta compleja MySQL

No entiendo bien, pero me parece que todo se revuelve con un LEFT JOIN no ?, si las frases bloqueadas para el usuario X no existieran en la lista de frases bloquedas, por lo tanto no estan bloquedas e igual se te muestran las frases, ahora si existen ahi segun la condicion que le des ... etsan bloqueadas jejejje no es dificil en realidad muestra las estructuras de tus tablas
  #10 (permalink)  
Antiguo 09/03/2012, 10:21
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Consulta compleja MySQL

Exacto o un NOT IN:
Código MySQL:
Ver original
  1. SELECT * FROM frases WHERE frase_id NOT IN (SELECT frase_id FROM bloqueadas WHERE id_user=15)
  #11 (permalink)  
Antiguo 09/03/2012, 19:10
 
Fecha de Ingreso: septiembre-2009
Ubicación: España
Mensajes: 136
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Consulta compleja MySQL

Bueno, deciros a todos muchisimas gracias por vuestra ayuda, la mejor soluucion fue la de GatorV me ha servido mucho, gracias de nuevo, un saludo a todos!:)

Etiquetas: compleja, mysql, tabla
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 19:25.