Ver Mensaje Individual
  #11 (permalink)  
Antiguo 13/03/2014, 18:12
Avatar de gnzsoloyo
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, 7 meses
Puntos: 2658
Respuesta: Count (*) Left Join

Como ya te ha aclarado Leonardo_Josue, el diseño de tablas no es correcto para lo que quieres. Es mejor plantearlo al menos con tres tablas, y yo lo haría mas o menos así:
Código MySQL:
Ver original
  1. mysql> DROP TABLE IF EXISTS clientes_actividades;
  2. Query OK, 0 rows affected (0.00 sec)
  3.  
  4. mysql> DROP TABLE IF EXISTS actividades;
  5. Query OK, 0 rows affected (0.02 sec)
  6.  
  7. mysql> DROP TABLE IF EXISTS clientes;
  8. Query OK, 0 rows affected (0.02 sec)
  9.  
  10. mysql>
  11. mysql> CREATE TABLE IF NOT EXISTS actividades (
  12.     ->     idActividad INT UNSIGNED PRIMARY KEY,
  13.     ->     NomActividad VARCHAR(50)
  14.     -> );
  15. Query OK, 0 rows affected (0.02 sec)
  16.  
  17. mysql>
  18. mysql> CREATE TABLE IF NOT EXISTS clientes (
  19.     ->     IdCliente INT UNSIGNED PRIMARY KEY,
  20.     ->     Url VARCHAR(300)
  21.     -> );
  22. Query OK, 0 rows affected (0.03 sec)
  23.  
  24. mysql>
  25. mysql> CREATE TABLE IF NOT EXISTS clientes_actividades (
  26.     ->     idActividad INT UNSIGNED,
  27.     ->     IdCliente INT UNSIGNED,
  28.     ->     Activado INT UNSIGNED,
  29.     ->     PRIMARY KEY (idActividad , IdCliente),
  30.     ->     FOREIGN KEY (idcliente)
  31.     ->         REFERENCES clientes (idcliente),
  32.     ->     FOREIGN KEY (idactividad)
  33.     ->         REFERENCES actividades (idactividad)
  34.     -> );
  35. Query OK, 0 rows affected (0.00 sec)
  36.  
  37. mysql>
  38. mysql> INSERT INTO actividades
  39.     -> VALUES(1, 'Neumaticos'),
  40.     -> (2, 'Peluquerias'),
  41.     -> (3, 'Carroceria'),
  42.     -> (4, 'Chapa');
  43. Query OK, 4 rows affected (0.00 sec)
  44. Records: 4  Duplicates: 0  Warnings: 0
  45.  
  46. mysql>
  47. mysql>
  48. mysql>
  49. mysql> INSERT INTO clientes
  50.     -> VALUES
  51.     -> (1, 'http://aa.aa.com'),
  52.     -> (2, 'http://bb.bb.com'),
  53.     -> (3, 'http://cc.cc.com'),
  54.     -> (4, 'http://dd.dd.com');
  55. Query OK, 4 rows affected (0.00 sec)
  56. Records: 4  Duplicates: 0  Warnings: 0
  57.  
  58. mysql>
  59. mysql> INSERT INTO clientes_actividades
  60.     -> VALUES
  61.     -> (1, 1, 1), (3, 1, 1),
  62.     -> (1, 2, 1), (4, 2, 1),
  63.     -> (3, 3, 1), (1, 3, 1),
  64.     -> (2, 4, 1);
  65. Query OK, 7 rows affected (0.00 sec)
  66. Records: 7  Duplicates: 0  Warnings: 0

En ese contexto, la query sería:
Código SQL:
Ver original
  1. mysql>
  2. mysql> SELECT
  3.     ->     c.idcliente, c.url, COUNT(*) actividades
  4.     -> FROM
  5.     ->     clientes c
  6.     ->         INNER JOIN
  7.     ->     clientes_actividades ca ON c.idcliente = ca.idcliente
  8.     ->         INNER JOIN
  9.     ->     actividades a ON ca.idactividad = a.idactividad
  10.     -> GROUP BY c.url;
  11. +-----------+------------------+-------------+
  12. | idcliente | url              | actividades |
  13. +-----------+------------------+-------------+
  14. |         1 | http://aa.aa.com |           2 |
  15. |         2 | http://bb.bb.com |           2 |
  16. |         3 | http://cc.cc.com |           2 |
  17. |         4 | http://dd.dd.com |           1 |
  18. +-----------+------------------+-------------+
  19. 4 ROWS IN SET (0.00 sec)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)