Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] SELECT selecion estricta

Estas en el tema de SELECT selecion estricta en el foro de PHP en Foros del Web. Buenas tengo otro problema que no se como definir ni buscar el acaso es que tengo dos tablas establishment, establishment_services el caso que necesito seleccionar ...
  #1 (permalink)  
Antiguo 07/09/2015, 06:23
Avatar de Lynxcraft  
Fecha de Ingreso: noviembre-2007
Ubicación: yecla murcia
Mensajes: 1.346
Antigüedad: 12 años
Puntos: 51
SELECT selecion estricta

Buenas tengo otro problema que no se como definir ni buscar el acaso es que tengo dos tablas establishment, establishment_services
el caso que necesito seleccionar los establishment siempre y cuando en la tabla servicios excita
llevo probando varias consultas y no se como resolverlo

Código MySQL:
Ver original
  1. SELECT xe.`id_establishment` FROM `cfx_hotel_establishment` xe, `cfx_hotel_establishment_services` xre
  2. WHERE xre.`id_services` AND IN(76 , 64) AND xe.`id_establishment` = xre.`id_establishment` GROUP BY xe.`id_establishment`


Código MySQL:
Ver original
  1. SELECT xe.`id_establishment` FROM `cfx_hotel_establishment` xe, `cfx_hotel_establishment_services` xre
  2. WHERE xe.`id_establishment` = 309 AND xre.`id_services`= 76 AND xre.`id_services`= 64

saludos
__________________
Sobran las ideas cuando faltan ganas de trabajar en ellas
Lynxcraft
  #2 (permalink)  
Antiguo 07/09/2015, 06:48
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.321
Antigüedad: 12 años
Puntos: 2653
Respuesta: SELECT selecion estricta

Este no es un tema de PHP, sino e SQL y BBDD.

Código MySQL:
Ver original
  1. SELECT xe.`id_establishment`
  2. FROM `cfx_hotel_establishment` xe INNER JOIN `cfx_hotel_establishment_services` xre
  3. ON  xe.`id_establishment` = xre.`id_establishment`
  4. WHERE xre.`id_services` AND IN(76 , 64)
Eso te devovlerá sólo los registros que coincidan entre ambas tablas, obligatoriamente, y pero sólo cuando cumplan la condición del WHERE indicada.

Por otr olado, no se encitende para qué usas el GROUP BY. Si es para ordenarlos, no es correcto. Y por otro lado si lo haces sobre la PK de la primera tabla, es innecesario, poreque la PK es siemrpe única...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 07/09/2015, 07:04
Avatar de Lynxcraft  
Fecha de Ingreso: noviembre-2007
Ubicación: yecla murcia
Mensajes: 1.346
Antigüedad: 12 años
Puntos: 51
Respuesta: SELECT selecion estricta

Gracias por la respuesta pero ya prove con algo similar
pero no funciona ya que me devuelve una lista con todos los id_establishment
que tenga (76 OR 64 )en id_services y lo que necesito es que me devuelva los id_establishment que contengan (76 AND 64) en id_services estrictamente

Código MySQL:
Ver original
  1. SELECT xe.`id_establishment`
  2.     FROM `cfx_hotel_establishment` xe INNER JOIN `cfx_hotel_establishment_services` xre
  3.     ON  xe.`id_establishment` = xre.`id_establishment`
  4.     WHERE xre.`id_services` IN(76 , 64)

PD:: este post lo abrí en mysql pero no se porque me lo guarda en este apartado

Saludos
__________________
Sobran las ideas cuando faltan ganas de trabajar en ellas
Lynxcraft
  #4 (permalink)  
Antiguo 07/09/2015, 07:32
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.321
Antigüedad: 12 años
Puntos: 2653
Respuesta: SELECT selecion estricta

Cita:
que tenga (76 OR 64 )en id_services y lo que necesito es que me devuelva los id_establishment que contengan (76 AND 64) en id_services estrictamente
Por lo pronto, partamos de la base que no puedes obtener registros que tengan ambos valores al mismo tiempo, ya que una columna no puede tener N valores diferentes del mismo datos (campo multivaluado).
Asumo que te estás refiriendo a que necesitas los id_establishment que corresponden a establecimientos que brindan AMBOS servicios, no uno u otro.

Bueno, la cosa es relativamente simple, y si lo que necesitas es sólo los ID, ni siquiera necesitas hacer un INNER JOIN, ni JOIN de ningún tipo...
Código MySQL:
Ver original
  1. SELECT xre.`id_establishment` , COUNT(DISTINCT xre.`id_services`) Servicios
  2.     FROM `cfx_hotel_establishment_services` xre
  3.     WHERE xre.`id_services` IN(76 , 64)
  4. GROUP BY xre.`id_establishment`
  5. HAVING COUNT(DISTINCT xre.`id_services`) = 2
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 07/09/2015, 08:01
Avatar de Lynxcraft  
Fecha de Ingreso: noviembre-2007
Ubicación: yecla murcia
Mensajes: 1.346
Antigüedad: 12 años
Puntos: 51
Respuesta: SELECT selecion estricta

que buena tio venia a cerrar el tema y me encuentro con algo similar a lo que acabo de programar , pero estoy viendo que tu consulta parece mas robusta voy a ver ver si la puedo aprovechar Gracias

Código MySQL:
Ver original
  1. SELECT xre.`id_establishment`
  2.             FROM `cfx_hotel_establishment_services` xre
  3.             WHERE xre.`id_services` IN(76 , 64) GROUP BY xre.`id_establishment` HAVING COUNT(*)= 2;

Muchas gracias por la ayuda
__________________
Sobran las ideas cuando faltan ganas de trabajar en ellas
Lynxcraft

Etiquetas: mysql
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 12:28.