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

Sentencia Count no devuelve registros bien

Estas en el tema de Sentencia Count no devuelve registros bien en el foro de Mysql en Foros del Web. Hola, Tengo una sentencia que me devuelve el "Count" de forma erronea, les explico las tablas, son dos: Tabla establecimientos: id -> autoincremental nombre -> ...
  #1 (permalink)  
Antiguo 17/04/2009, 03:47
Avatar de pempas  
Fecha de Ingreso: diciembre-2003
Ubicación: Barcelona
Mensajes: 985
Antigüedad: 20 años, 4 meses
Puntos: 6
Sentencia Count no devuelve registros bien

Hola,

Tengo una sentencia que me devuelve el "Count" de forma erronea, les explico las tablas, son dos:

Tabla establecimientos:
id -> autoincremental
nombre -> char
idciudad -> integer
idpoblacion -> integer

Tabla establecimientos_sectores:
idestablecimiento -> integer
idsector -> integer

La consulta que hago para extraer la info es esta:

Cita:
Select e.id, e.nombre, Count(e.id) As Total From establecimientos e Inner Join establecimientos_sectores s ON (e.id=s.idestablecimiento And s.idsector=2) Where e.idciudad=09 Group By e.id Order By RAND();
El tema está, que los datos los devuelve de esta guisa:

Cita:
ID = 1
Nombre = Comercio 1
Total = 2

ID = 2
Nombre = Comercio 2
Total = 1

ID = 3
Nombre = Comercio 3
Total = 1
El tema está en que el "Comercio 1" tiene establecidos dos sectores a la vez, mientras que el Comercio 2, solo tiene establecido uno, por lo que entiendo, que el count, me está contando el número de sectores de cada comercio, cuando lo que yo quiero es sacar la cuenta de los establecimientos que voy a mostrar...

¿Cómo puedo solventarlo?, he mirado de todo, pero no encuentro la manera.

Gracias!
  #2 (permalink)  
Antiguo 17/04/2009, 06:42
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Sentencia Count no devuelve registros bien

Código sql:
Ver original
  1. SELECT e.id,
  2.     e.nombre,
  3.     COUNT(*) AS Total
  4. FROM establecimientos e
  5.          INNER JOIN establecimientos_sectores s
  6.           ON e.id=s.idestablecimiento
  7. WHERE s.idsector=2
  8.          AND e.idciudad="09"
  9. GROUP BY e.id ORDER BY RAND();

Ahora, si?

En este caso Total siempre deberia ser 1 por lo que es inutil

Código sql:
Ver original
  1. SELECT e.id,
  2.     e.nombre
  3. FROM establecimientos e
  4.          INNER JOIN establecimientos_sectores s
  5.           ON e.id=s.idestablecimiento
  6. WHERE s.idsector=2
  7.          AND e.idciudad="09"
  8. ORDER BY RAND();

Te dará la misma lista.

Si quieres el total de establecimientos

Código sql:
Ver original
  1. SELECT COUNT(*) AS Total
  2. FROM establecimientos e
  3.          INNER JOIN establecimientos_sectores s
  4.           ON e.id=s.idestablecimiento
  5. WHERE s.idsector=2
  6.          AND e.idciudad="09";

Si usas php hay funciones para preguntarle a la primera sentencia cuantos registros ha generado...

Quim
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 03:04.