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

sql, and, and no me anda....

Estas en el tema de sql, and, and no me anda.... en el foro de Mysql en Foros del Web. hola por ejemplo tengo muchos locales, cada uno cumple una actividad, que estara enumerada en otra tabla , por ejemplo , del 1 al 50... ...
  #1 (permalink)  
Antiguo 21/02/2013, 09:44
 
Fecha de Ingreso: junio-2010
Mensajes: 752
Antigüedad: 13 años, 10 meses
Puntos: 5
sql, and, and no me anda....

hola por ejemplo tengo muchos locales, cada uno cumple una actividad, que estara enumerada en otra tabla , por ejemplo , del 1 al 50... seran las actividades...

en un formulario tendre un check. con las 50 actividades..

cada local , tendra algunas actividades, no creo que halla locales donde tenga todas las 50 activadades

por ejemplo seria asi..
la tabla es masomenos asi

local 1, actidades 4
local 1, actidades 7
local 1, actidades 9
local 2, actidades 2
local 2, actidades 9
local 3, actidades 1


como hago para encontrar el local 1

no me da. si hago .
select from locales where actividades=4 and actividades = 7 and actividades =9

iria un group by. o extraigo los datos en un php y comparo si ..o

....
  #2 (permalink)  
Antiguo 21/02/2013, 09:48
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: sql, and, and no me anda....

Código MySQL:
Ver original
  1. select local_id, COUNT(*) cantidad de actividades
  2. from locales
  3. where actividades IN(4, 7, 9)
  4. group by local_id

Es un problema de manual. Aparece en cualquier tutorial básico de COUNT() y GROUP BY.
Google, Google... Google.
__________________
¿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 21/02/2013, 10:31
 
Fecha de Ingreso: junio-2010
Mensajes: 752
Antigüedad: 13 años, 10 meses
Puntos: 5
Respuesta: sql, and, and no me anda....

pero este me trae los locales que tienen si o si, todas las actividades?

que tengan 4,7, y 9

por que el IN, me funciona como OR. segun lei...
  #4 (permalink)  
Antiguo 21/02/2013, 10:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: sql, and, and no me anda....

Depende de lo que busques.
si lo que quieres es que devuelva solamente los casos en que se cumple todos, hay dos formas básicas de hacerlo:
Código MySQL:
Ver original
  1. SELECT local_id, COUNT(DISTINCT actividades ) `cantidaddeactividades`
  2. FROM locales
  3. WHERE actividades IN(4, 7, 9)
  4. GROUP BY local_id
  5. HAVING COUNT(DISTINCT actividades)=3;

o bien probamos:
Código MySQL:
Ver original
  1. SELECT local_id, COUNT(DISTINCT actividades ) `cantidaddeactividades`
  2. FROM locales
  3. WHERE actividades IN ALL(4, 7, 9)
  4. GROUP BY local_id

Lo que no puede existir es un campo multivaluado, por lo que si la tabla "locales" contiene sólo un registro por local, actividades debe tener un único valor y por tanto ninguna consulta devolvería datos en ese contexto.
Si tu campo "actividades" contiene una lista de valores, desde ya te digo que es un error de los gravísimos, y además, te faltaría al menos una tabla.
__________________
¿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 21/02/2013, 11:12
 
Fecha de Ingreso: junio-2010
Mensajes: 752
Antigüedad: 13 años, 10 meses
Puntos: 5
Respuesta: sql, and, and no me anda....

por ejemplo si hay un local que tiene las actividades...

local , actividad
1-----------1
1-----------4
1-----------8
1-----------3
1-----------7

y si busco un local que tenga las actividades 4,8,y 3 .quiero que me lo traiga igual al local 1,
no es que solamente debe tener esas 3 actividades

---parecia una consulta simple.--- pero no era tan asi....
  #6 (permalink)  
Antiguo 21/02/2013, 11:17
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: sql, and, and no me anda....

El tema es que la lógica a aplicar es excluyente. Es decir: Si buscas que sean sólo esos, pero además otro(s) más, debes plantear las condiciones por separado:
Código MySQL:
Ver original
  1. SELECT local_id, COUNT(DISTINCT actividades ) `cantidaddeactividades`
  2. FROM locales
  3. WHERE local_id IN(
  4.   SELECT local_id
  5.   FROM locales
  6.   WHERE actividades IN(4, 7, 9)
  7.   GROUP BY local_id
  8.   HAVING COUNT(DISTINCT actividades)=3)
  9. GROUP BY local_id;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 21/02/2013, 11:43
 
Fecha de Ingreso: junio-2010
Mensajes: 752
Antigüedad: 13 años, 10 meses
Puntos: 5
Respuesta: sql, and, and no me anda....

la idea es que si busco un local que tenga las actividades..

4, 7, 9

la idea es que entre sus actividades ESTEN ESAS 3.

despues, NO IMPORTA si, tiene esas 3 unicas actividades, o tiene ademas de esas 3, otras mas

gracias
  #8 (permalink)  
Antiguo 21/02/2013, 12:01
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: sql, and, and no me anda....

¿Probaste lo último?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 21/02/2013, 12:41
 
Fecha de Ingreso: junio-2010
Mensajes: 752
Antigüedad: 13 años, 10 meses
Puntos: 5
Respuesta: sql, and, and no me anda....

mira me confundo un poco, tengo , mi la tabla asi..


TABLA : local_act


locales---actividad-----local

1-----------2-----------1
2-----------3-----------3
3-----------4-----------1
4-----------6-----------9
5-----------9-----------1
6-----------2-----------3
7-----------4-----------3
8-----------3-----------5
9-----------6-----------5
10-----------7-----------5



tengo que traer una serie de locales, el ID de cada local , estan debajo del campo "local",

no solo uno, los que encuentre.. si es uno esta bien, si hay mas , es igual

por ejemplo quiero traer los que tengan las actividades 2 y 4

los locales que tienen esas actividades son el 1 y el 3

Última edición por vani18; 21/02/2013 a las 12:53
  #10 (permalink)  
Antiguo 21/02/2013, 13:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: sql, and, and no me anda....

Te estás ahogando en un vaso de agua. La solución está ante tus ojos, solamente tienes que adaptar la consulta a la tabla que tienes:

Código MySQL:
Ver original
  1. SELECT `local`, COUNT(DISTINCT actividad ) `CantidadDeActividades`
  2.   FROM locales
  3.  WHERE `local`
  4.     IN( SELECT  `local`
  5.           FROM locales
  6.          WHERE actividad IN(2, 4)
  7.       GROUP BY `local`
  8.         HAVING COUNT(DISTINCT activid)=2)
  9. GROUP BY `local`;

No termino de entender por qué te resulta confuso
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 21/02/2013, 13:37
 
Fecha de Ingreso: junio-2010
Mensajes: 752
Antigüedad: 13 años, 10 meses
Puntos: 5
Respuesta: sql, and, and no me anda....

bueno el in all, no lo encontraba en el sql... como explicacion ..
otra ,
al final la resolucion es una subconsulta....
y en la pagina q estoy viendo tenia una "linea d sql" , esta en una minima parte del codigo, al que se le suman otros, and o or

HAVING COUNT(DISTINCT activid)=2)


por ejemplo en el =2.. tiene que ser dinamico, pero bueno ...sera dinamico... con php....

gracias .!
  #12 (permalink)  
Antiguo 21/02/2013, 14:07
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: sql, and, and no me anda....

Cita:
bueno el in all, no lo encontraba en el sql... como explicacion ..
Eso lo tienes que buscar en el manual de referencia de cada DBMS, not todos implementan las cosas del mismo modo.
Cita:
por ejemplo en el =2.. tiene que ser dinamico, pero bueno ...sera dinamico... con php....
Esa es la idea...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: php, select, sql, 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 10:27.