unir - MySQL se une y CUENTA(*) desde otra tabla
unir dos consultas sql misma tabla (4)
Tal vez estoy fuera de lugar aquí y no entiendo el OP, pero ¿por qué te unes a las mesas?
Si tiene una tabla con miembros y esta tabla tiene una columna llamada "group_id", puede ejecutar una consulta en la tabla de miembros para obtener un recuento de los miembros agrupados por group_id.
SELECT group_id, COUNT(*) as membercount
FROM members
GROUP BY group_id
HAVING membercount > 4
Esto debería ser lo menos costoso simplemente porque estás evitando una unión pero aún así debes darte lo que deseas.
Si desea los detalles y la descripción del grupo, etc., agregue una combinación de la tabla de miembros de nuevo a la tabla de grupos para recuperar el nombre que le daría el resultado más rápido.
Tengo dos tablas: groups
y group_members
.
La tabla de groups
contiene toda la información para cada grupo, como su ID, título, descripción, etc.
En la tabla group_members
, enumera todos los miembros que están separados de cada grupo de esta manera:
group_id | user_id
1 | 100
2 | 23
2 | 100
9 | 601
Básicamente, quiero enumerar TRES grupos en una página, y solo quiero enumerar los grupos que tienen MÁS de cuatro miembros. Dentro del ciclo <?php while ?>
, Quiero cuatro miembros que estén separados de ese grupo. No tengo problemas para enumerar los grupos y listar los miembros en otro ciclo interno, simplemente no puedo refinar los grupos para que solo aparezcan los que tienen más de 4 miembros.
¿Alguien sabe cómo hacer esto? Estoy seguro de que es con las uniones de MySQL.
Su tabla groups_main
tiene una columna clave llamada id
. Creo que solo puede usar la sintaxis de USING
para la unión si la tabla groups_fans
tiene una columna de clave con el mismo nombre, que probablemente no lo haga. Entonces, en cambio, intente esto:
LEFT JOIN groups_fans AS m ON m.group_id = g.id
O reemplace group_id
con el nombre de columna apropiado en la tabla groups_fans
.
MySQL usa la instrucción HAVING para estas tareas.
Su consulta se vería así:
SELECT g.group_id, COUNT(m.member_id) AS members
FROM groups AS g
LEFT JOIN group_members AS m USING(group_id)
GROUP BY g.group_id
HAVING members > 4
ejemplo cuando las referencias tienen diferentes nombres
SELECT g.id, COUNT(m.member_id) AS members
FROM groups AS g
LEFT JOIN group_members AS m ON g.id = m.group_id
GROUP BY g.id
HAVING members > 4
Además, asegúrese de establecer índices dentro del esquema de la base de datos para las claves que está utilizando en UNIRSE, ya que puede afectar el rendimiento de su sitio.
SELECT DISTINCT groups.id,
(SELECT COUNT(*) FROM group_members
WHERE member_id = groups.id) AS memberCount
FROM groups