entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Conteo/suma de usuarios en base de datos MySQL

Hola, paso a comentarles mi inquietud.

Tengo una tabla llamada "facciones" que posee las ID's y los nombres de las mismas (éstas son los "grupos" de los que hablo). Y además, una tabla "usuarios", los usuarios tienen en sus filas la columna "faccion", si la ID de la faccion coincide con alguna de las que está en la tabla "facciones" quiere decir que el mismo pertenece a tal. Además los usuarios poseen una columna llamada "online" que indica el estado de conexión de los mismos.

Ahora, lo que quiero hacer es, como bien mencioné arriba, una suma entre los usuarios que son de una misma facción o grupo y además, comparten su columna "online" en 1.

En resumen (y supongo que, ya a esta altura se entendió), quiero hacer una opción que muestre cuántos usuarios de un mismo grupo están conectados y sea visible para todo el grupo.

Gracias.

2 Respuestas

4votos

white Puntos75880

Hola @KevinLeyes, Que tal si usas las sentencias COUNT y GROUP BY:

SELECT COUNT(id) as total
FROM users
WHERE online = 1
GROUP BY faccion

la columna total contendría el total de usuarios que esten online, y los agrupamos por la columna faccion.

0voto

Leyes comentado

Gracias por tu respuesta.

¿Y eso mismo cómo podría plasmarlo en un...

<?php echo $ejemplo1['ejemplo2']; ?>

...?

1voto

white comentado

Puedes hacer una consulta en php y seleccionar otras columnas:

<?php

$result = mysqli_query("
    SELECT COUNT(id) as total, faccion
    FROM users
    WHERE online = 1
    GROUP BY faccion");

while ($row = $result->fetch_assoc()) {
    echo 'faccion ' . $row['faccion'] . ' tiene un total de ' .
         $ow['total'] . '<br>';
}

0voto

Leyes comentado

Gracias por responder.

No sé si me sea útil, intenté adaptarlo pero al parecer no podrá servirme. Mira, yo antes hago una consulta, es esta:

<?php
          $sql = mysql_query("SELECT * FROM facciones WHERE id='".$player['faccion']."'");
          if($faccion = mysql_fetch_array($sql))
?>

Y la uso después para este tipo de cosas:

<?php echo $faccion['Nombre']; ?>
<?php echo $faccion['Tipo']; ?>

¿Cómo podría hacerlo si anteriormente ya hice una consulta? ¿No hay manera de adaptar tu código al que uso actualmente?

Saludos.

1voto

MitsuGami Puntos8010

UPDATE

Con un inner join y agrupando por id de facción lo tienes.

<?php

// se supone que en este punto, el player está disponible en sesión, por lo que fácilmente
// podemos obtener sus datos. Lo que nos interesa es el id de facción del player para
// mostrarle cuántos players conectados hay actualmente en su facción
$sql = "SELECT f.id_faccion, f.nombre_faccion, COUNT(u.id_usuario) AS total FROM facciones f
    INNER JOIN Usuarios u ON (f.id_faccion = u.id_faccion)
    WHERE u.online = 1
    GROUP BY f.id_faccion, f.nombre_faccion
    HAVING f.id_faccion = ".$player['faccion']; // Aquí filtramos por la facción del player

    $connection = new mysqli("localhost", "root", "", "online");
        $rs = $connection->query($sql);

        $datosFacciones = array();
        while($row = $rs->fetch_assoc()) {
            $datosFacciones[] = $row;
        }
    ?>
<!DOCTYPE html>
<html lang="es">
<head>
    <title>Usuarios contectados</title>
    <meta charset="UTF-8" >
</head>
<body>
    <table>
        <thead>
            <tr>
                <th>Facción</th>
                <th>Total usuarios conectados</th>
            </tr>
        </thead>
        <tbody>
            <?php
                foreach($datosFacciones as $row) {
                    ?>
                    <tr>
                        <td><?= $row["nombre_faccion"] ?></td>
                        <td><?= $row["total"] ?></td>
                    </tr>
                <?php }
            ?>
        </tbody>
    </table>
</body>
</html>

0voto

Leyes comentado

Gracias MitsuGami.

Sin embargo, sigo aún sin conseguir lo que busco. No sé si estoy adaptando mal el código o qué, aquí lo adjunto completo (porque más arriba hago una conexión ya con la DB, a ver qué te parece).

Como superé la longitud máxima de caracteres, lo pongo en Google Drive: https://docs.google.com/document/d/1usLN01kWrjExS-Utau9CU8vkXqCtAA_3arM1mQnGaNQ/edit?usp=sharing

1voto

MitsuGami comentado

No se puede leer correctamente porque no hay resaltado ni formateado de código :S Pero dime, ¿qué es exactamente lo que quieres hacer y en qué forma?

El código que te puse simplemente muestra en una tabla El nombre de la facción y la cantidad de usuarios conectados.

Si esto no es lo que deseas, actualiza tu post y agrega más detalles para poderte comprender. También agrega antecedentes a esa consulta.

0voto

Leyes comentado

Tengo una tabla facciones y otra usuarios.
En usuarios están las columnas faccion, rango y online. La columna facción indica el ID de la tabla facciones, rango indica el N° de rango (aunque esto es irrelevante acá) y online indica si el usuario está o no conectado.

Lo que quisiera hacer es mostrar de una facción en concreta (la que el usuario es miembro) la cantidad de usuarios que son de esa facción y tienen su columna online en 1 (es decir, que están conectados).

<?php
          $sql = mysql_query("SELECT * FROM facciones WHERE id='".$player['faccion']."'");
          if($faccion = mysql_fetch_array($sql))
?>

0voto

MitsuGami comentado

Hola @KevinLeyes. Disculpa la tardanza, ve mi respuesta, la he actualizado. En resumen, solo obtienes el id de facción del usuario en sesión y lo utilizas en un having para mostarle los usuarios conectados en su mismo grupo.

0voto

Leyes comentado

No hay problema con el tiempo @MitsuGami, gracias por responder.

Ahí intenté y me saltaron los siguientes errores:

Warning: mysqli::mysqli(): (HY000/1049): Unknown database 'online' in C:\xampp\htdocs\tu-fac.php on line 9

Warning: mysqli::query(): Couldn't fetch mysqli in C:\xampp\htdocs\tu-fac.php on line 10

Fatal error: Call to a member function fetch_assoc() on null in C:\xampp\htdocs\tu-fac.php on line 13

Pertenece todo acá:

<?php
$sql = "SELECT f.id_faccion, f.nombre_faccion, COUNT(u.id_usuario) AS total FROM facciones f
    INNER JOIN Usuarios u ON (f.id_faccion = u.id_faccion)
    WHERE u.online = 1
    GROUP BY f.id_faccion, f.nombre_faccion
    HAVING f.id_faccion = ".$player['faccion'];

    $connection = new mysqli("localhost", "root", "", "online"); // Línea 9
        $rs = $connection->query($sql); // Línea 10

        $datosFacciones = array();
        while($row = $rs->fetch_assoc()) { // Línea 13
            $datosFacciones[] = $row;
        }
    ?>

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta