Solucionado

contar registros repetidos mysql

11438 visitas 9 respuestas

buen dia para todos tengo el siguiente consulta

public function total_desc() 
{
  $sql="SELECT nombre, count(nombre) AS total
          FROM usuarios
          GROUP BY nombre
           ORDER BY total desc";
    $res=mysql_query($sql,Conectar::con());
    if ($reg=mysql_fetch_array($res))
   {
         $total=$reg["total"];
   } 
   return $total;
  }

como respuesta solo me aparece 17 y yo lo que necesito es que se imprima

pedro 17

juan 15

carlos 3

o si hay forma de imprimir de a uno los resultados también me sirve de antemano mil gracias .

por desde Colombia

Registrado desde: 23 Mar 12

Respuestas

1 0

Prueba esta consulta:

 SELECT DISTINCT us1.nombre, (SELECT COUNT(us2.nombre) FROM usuarios AS us2 WHERE us2.nombre = us1.nombre) AS total FROM usuarios AS us1 ORDER BY total desc

No sé si esta exactamente te funcionará, pero la idea es esta. Necesitas una subconsulta para saber la cantidad de veces que se repite cada nombre.

Otra opción sería contarlos en PHP (que veo que es lo que utilizas) con algo de este estilo:

$sql = 'SELECT nombre FROM usuarios';
$res = mysql_query($sql, Conectar::con());
$lista = array();
 while ($reg = mysql_fetch_array($res)) {
    if (array_key_exists($reg['nombre'], $lista)) {
        $lista['nombre'] += 1;
     }
    else {
        $lista['nombre'] = 1;
     }
}
asort($lista); // arsort() si se quiere en onrden inverso

 foreach ($lista as $key => $value) {
     echo $key. ' ' .$value;
  }

por desde España

Registrado desde: 19 Jul 07
0 0

Irozga te agradezco la atención y el tiempo que te tomaste en contestarme , probe el codigo pero no me funciona; y la otra opción de contarlos en php si funciona, pero no se imprimen automaticamente en orden descendente, debo darles el nombre manualmente para que se me impriman en pantalla con su respectivo total. mil gracias.

por desde Colombia

Registrado desde: 23 Mar 12
0 0

¿Te refieres a que no se muestran o a qué no se muestran en el orden deseado?

por desde España

Registrado desde: 19 Jul 07
0 0

buen día Irozga , me refiero a que los registros no se imprimen automaticamente , debo colocar en el codigo el nombre de cada usuario y asi si los muestra. salu2.

por desde Colombia

Registrado desde: 23 Mar 12
2 0

Vale, no sé en qué estaría pensando cuándo escribí lo de antes. Prueba con esto:

 $sql = 'SELECT nombre FROM usuarios';
 $res = mysql_query($sql, Conectar::con());
  $lista = array();
      while ($reg = mysql_fetch_array($res)) {
        if (array_key_exists($reg['nombre'], $lista)) {
            $lista[$reg['nombre']] += 1;
         }
        else {
             $lista[$reg['nombre']] = 1;
         }
   }
   asort($lista); // arsort() si se quiere en onrden inverso

   foreach ($lista as $key => $value) {
        echo $key. ' ' .$value;
   }

por desde España

Registrado desde: 19 Jul 07
0 0

buen día Irozga, te agradezco mucho que te tomes el tiempo para contestarme, lo voy a probar y luego te aviso , de nuevo mil gracias,

por desde Colombia

Registrado desde: 23 Mar 12
0 0

ya probe el codigo Irozga y funciona , te agradezco mucho el ayudarme con estas consultas eres un genio , bendiciones y salu2

por desde Colombia

Registrado desde: 23 Mar 12
0 1

hola!!! por favor me pueden deir a que código corresponde lo siguiente:

$res = mysql_query($sql, Conectar::con());

especificamente el Conectar::con().....ya que copie el codigo y lo adapte a mis necesidades pero soy nueva en php y esto no se que significa, a dónde apunta?

Gracias!!!

por desde Venezuela

Registrado desde: 27 May 13
0 0

Hola! @desi3783, $res = mysql_query($sql, Conectar::con()); LA VARIABLE $sql pertenece a la query arroba declarada. y lo consecuente Conectar::con es una igualacion a la variable $conexion. te recomiendo que borres "Conectar::con()", y lo sustituyas por la variable que define tu conexion a la base de datos y en general al la tabla