Pregunta

Tengo dos tablas: groups y group_members.

La tabla groups contiene toda la información de 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 a cuatro miembros que son parte de ese grupo.No tengo problemas para enumerar los grupos y enumerar a los miembros en otro ciclo interno, simplemente no puedo refinar los grupos para que SOLO aparezcan aquellos con más de 4 miembros.

¿Alguien sabe cómo hacer esto?Estoy seguro de que es con combinaciones de MySQL.

¿Fue útil?

Solución

MySQL usa la declaració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 nombres diferentes

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 de su esquema de base de datos para las claves que está utilizando en JOINS, ya que puede afectar el rendimiento de su sitio.

Otros consejos

SELECT DISTINCT groups.id, 
       (SELECT COUNT(*) FROM group_members
        WHERE member_id = groups.id) AS memberCount
FROM groups

Su tabla groups_main tiene una columna clave llamada id.Creo que solo puede usar la sintaxis USING para la combinación si la tabla groups_fans tiene una columna clave con el mismo nombre, lo que probablemente no tenga.Entonces, en su lugar, 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.

Tal vez estoy equivocado 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 tener la menor sobrecarga simplemente porque está evitando unirse, pero aún así debería darle lo que desea.

Si desea obtener los detalles y la descripción del grupo, etc., agregue una combinación de la tabla de miembros a la tabla de grupos para recuperar el nombre y obtener el resultado más rápido.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top