Ver Mensaje Individual
  #4 (permalink)  
Antiguo 19/07/2012, 10:34
jurena
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Consulta en dos tablas

Sobre el count y el having
Observa lo que tienes en tu segunda tabla, y verás que resulta imposible localizar los que cumplen los tres sin usar una búsqueda con OR (IN para simplificar), que te traería los tres, y un agrupado para contar. Al agrupar por el campo Equipos_Codigo y realizar la búsqueda con OR puedes sacar el total con COUNT, pero para evitar errores debes indicar que sean distintos. El filtro es obligado hacerlo con HAVING, pues el filtro con WHERE es previo al agrupado y el HAVING posterior. Es fácil comparar luego con el alias del COUNT (distinct B.Ctrl_Tipo).

No conozco el rango de opciones, es decir, si hay más valores que 1, 2, 3; si no los hay el selector debería tener los distintos valores, un posible selector sería este
1 control: 1
1 control: 2
1 control: 3
2 controles: 1, 2
2 controles: 1, 3
2 controles: 2, 3
3 controles: 1, 2, 3

el value sería la cadena de texto con los valores, y con esa cadena podrías sacar mediante programación el número para el having, aunque también podría ir en el value:
1-1
1-2
1-3
2-1,2
2-1,3
2-2,3
3-1,2,3

Ahora podrías separar fácilmente los datos para añadirlos en tu consulta.

También podrías hacerlo con un selector con javascript, primero el número de controles
1
2
3
Y luego, según elijas, te mostrará el número de inputs apropiados para cargar las variables.
Pero estas, como otras también pertinentes al caso, no son cuestiones de MySQL y deberías preguntarlas en otros foros PHP, HTML y javascript

En cualquier caso y por lo que se refiere a la base, piensa que tras IN y entre paréntesis añades la cadena de los valores elegidos, y el valor tras el having > siempre será uno menos que el número de controles. Sí podría añadir que si quieres más exactitud uses no having > un número menos, sino HAVING = número exacto
HAVING = 3
en el caso del ejemplo.

Aquí no podemos decirte más sin transgredir las normas del foro.

Última edición por jurena; 19/07/2012 a las 11:07