Ver Mensaje Individual
  #6 (permalink)  
Antiguo 13/02/2015, 09:15
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Select count(*)

Hola mbrisenog:

Creo que ya gnzsoloyo te comentó por qué razón el modelo que tienes no es eficiente, además me gustaría agregar un comentario adicional.

No es conveniente que guardes valores como SI y NO en un campo VARCHAR... esto porque un campo VARCHAR te permite capturar cualquier valor (independientemente de que tú como programador "valides" que sólo capture estos valores).

Lo correcto es hacerlo por catálogos, es decir, tener algo como esto:

Código:
tabla_boleanos:

id|descripcion
-------------------
1|SI
2|NO
De tal manera que en tu tabla de permisos MANEJAS EL ID, no la descripción. Esto pareciera que complica las cosas, pues no parece muy "eficiente" tener una tabla sólo con dos estados, pero te aseguro que en la práctica, esto te quita bastantes dolores de cabeza.

Ahora, volviendo a tu problema original, hay una forma de hacer el conteo, y sería haciendo una suma condicional, es decir, algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT id, usuario, area1, area2 FROM tabla;
  2. +------+---------+-------+-------+
  3. | id   | usuario | area1 | area2 |
  4. +------+---------+-------+-------+
  5. | 1001 | juan    | SI    | NO    |
  6. | 1002 | jose    | SI    | SI    |
  7. | 1003 | omar    | NO    | SI    |
  8. | 1004 | mario   | SI    | SI    |
  9. | 1005 | pedro   | NO    | NO    |
  10. +------+---------+-------+-------+
  11. 5 rows in set (0.00 sec)
  12.  
  13. mysql> SELECT
  14.     ->    id,
  15.     ->    usuario,
  16.     ->    area1,
  17.     ->    area2,
  18.     ->    IF(area1 = 'SI', 1, 0) + IF(area2 = 'SI', 1, 0) total_si
  19.     -> FROM tabla;
  20. +------+---------+-------+-------+----------+
  21. | id   | usuario | area1 | area2 | total_si |
  22. +------+---------+-------+-------+----------+
  23. | 1001 | juan    | SI    | NO    |        1 |
  24. | 1002 | jose    | SI    | SI    |        2 |
  25. | 1003 | omar    | NO    | SI    |        1 |
  26. | 1004 | mario   | SI    | SI    |        2 |
  27. | 1005 | pedro   | NO    | NO    |        0 |
  28. +------+---------+-------+-------+----------+
  29. 5 rows in set (0.00 sec)

Aquí tendrías que agregar tantos IF's como áreas tengas en tu tabla, es por lo que comentaba gnzsoloyo que el modelo es ineficiente.

Saludos
Leo.