Foros del Web » Programando para Internet » PHP »

contar resultados repetidos

Estas en el tema de contar resultados repetidos en el foro de PHP en Foros del Web. Hola, resulta que tengo una tabla con esta columna: estado que se rellena según el estado en el que esté: 1 = esperando 2 = ...

  #1 (permalink)  
Antiguo 26/04/2013, 09:26
Avatar de Most  
Fecha de Ingreso: marzo-2009
Mensajes: 642
Antigüedad: 15 años, 8 meses
Puntos: 6
contar resultados repetidos

Hola, resulta que tengo una tabla con esta columna:

estado

que se rellena según el estado en el que esté:

1 = esperando
2 = validado
3 = cancelado


si la columna tiene este contenido:

Nick | Estado

Felip - 2
Felip - 2
Felip - 1
edu - 1
edu - 2
edu - 3
manu - 3
manu - 3
manu - 3


Lo que necesito saber, es como hacer para que me muestre algo así:

Felip tiene 2 validado, 1 esperando
edu tiene 1 esperando, 1 validado, 1 cancelado
manu tiene 3 cancelado


Aquí dejo el código de como lo tengo el código ahora mismo:

Código PHP:
<?php
$topusers
=mysql_query("SELECT autor,estado, COUNT(autor ) total
FROM top
WHERE estado LIKE '2'
GROUP BY autor ORDER BY total DESC
LIMIT 50"
,$connect);

$contador 1;
while(
$row=mysql_fetch_array($topusers))
{
?>
             <tr>
                    <td class="col-cell col-espera"><?php echo $contador ?></td>
                     <td><?php echo $row[autor?></td>
                    <td class="col-cell col-ok">AQUI LAS VALIDADAS</td>
                    <td class="col-cell col-no">AQUI LAS CANCELADAS</td>
            </tr>
            
<?php
$contador 
$contador 1;
}
?>

Espero que me podáis ayudar.
Gracias.

Última edición por Most; 26/04/2013 a las 09:35
  #2 (permalink)  
Antiguo 26/04/2013, 09:41
pr0
 
Fecha de Ingreso: marzo-2004
Mensajes: 687
Antigüedad: 20 años, 7 meses
Puntos: 28
Respuesta: contar resultados repetidos

Código PHP:
Ver original
  1. $autores = array('Felip', 'edu', 'manu');
  2.  
  3. foreach($autores as $autor){
  4.  
  5.    //las 3 consultas
  6.    $sql = 'SELECT count(*) FROM tabla WHERE autor = 'Felip' AND estado = 1';
  7.    $resultado1 = mysql_fetch_array($sql);
  8.  
  9.    $sql = 'SELECT count(*) FROM tabla WHERE autor = 'Felip' AND estado = 2';
  10.    $resultado2 = mysql_fetch_array($sql);
  11.  
  12.    $sql = 'SELECT count(*) FROM tabla WHERE autor = 'Felip' AND estado = 3';
  13.    $resultado3 = mysql_fetch_array($sql);
  14.  
  15.    //montamos un array con la siguiente estructura
  16.  
  17.    $estados[] = array('autor' => $resultado1['autor'], 'esperando' => $resultado2['total'], 'validado' => $resultado3['total'], 'cancelado' => $resultado3['total']);
  18.  
  19. }

Con esto tendrás un array ($estados) con un array interno por cada autor con el total de sus 3 estados, lo recorres y vas mostrando con el formato que quieras.

Espero que se entienda.

Última edición por pr0; 26/04/2013 a las 09:55
  #3 (permalink)  
Antiguo 26/04/2013, 10:06
Avatar de Most  
Fecha de Ingreso: marzo-2009
Mensajes: 642
Antigüedad: 15 años, 8 meses
Puntos: 6
Respuesta: contar resultados repetidos

Buenas, gracias por la ayuda, no me ha quedado muy claro

No se como meter eso aqui ya que se me tendria que mostrar aquí:




<td><?php echo $row[autor] ?></td>
<td class="col-cell col-ok">VALIDAS</td>
<td class="col-cell col-no">CANCELADAS</td>
  #4 (permalink)  
Antiguo 26/04/2013, 11:26
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: contar resultados repetidos

Tienes que usar SUM() en tu query para sumar los valores, te dejo un ejemplo, tú adaptalo a tu query y a los valores que tienes:
Código MySQL:
Ver original
  1. SELECT autor, SUM(IF(estatus=1, 1, 0) AS esperando FROM tutabla

Saludos.
  #5 (permalink)  
Antiguo 26/04/2013, 12:50
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 3 meses
Puntos: 793
Respuesta: contar resultados repetidos

Hacer 3 consultas me parece pésima idea. Mejor si lo haces como dice GatorV:

Código PHP:
Ver original
  1. <?php
  2.  
  3. try {
  4.     $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '12345');
  5.     $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  6.     $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
  7.    
  8.     $stmt = $pdo->prepare('SELECT autor, SUM(IF(estado = 1, 1, 0)) esperando, SUM(IF(estado = 2, 1, 0))
  9.    validado, SUM(IF(estado = 3, 1, 0)) cancelado FROM top GROUP BY autor');
  10.     $stmt->execute();
  11.     $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
  12.    
  13.     foreach ($result as $autor) {
  14.         echo "{$autor['autor']} tiene {$autor['esperando']} esperando, {$autor['validado']} validado,
  15.        {$autor['cancelado']} cancelado.<br />";
  16.     }
  17. } catch(PDOException $e) {
  18.     echo $e->getMessage();
  19. }
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #6 (permalink)  
Antiguo 26/04/2013, 15:59
Avatar de Most  
Fecha de Ingreso: marzo-2009
Mensajes: 642
Antigüedad: 15 años, 8 meses
Puntos: 6
Respuesta: contar resultados repetidos

Ok, gracias

En cuanto lo use, comento como me fue.
  #7 (permalink)  
Antiguo 26/04/2013, 16:45
Avatar de Most  
Fecha de Ingreso: marzo-2009
Mensajes: 642
Antigüedad: 15 años, 8 meses
Puntos: 6
Respuesta: contar resultados repetidos

Bueno, después de probarlo, efectivamente funciona, pero al querer incorporarlo a mi código, se me muestra validado pero cancelado se me muestra como 0 no me da ninguna cantidad, así lo he dejado:

Código PHP:
<?php
$topusers
=mysql_query("SELECT autor, 
COUNT(autor ) totpages,
SUM(IF(estado = 2, 1, 0)) validado, 
SUM(IF(estado = 3, 1, 0)) cancelado
FROM top
WHERE estado LIKE '2'
GROUP BY autor ORDER BY totpages DESC
LIMIT 50"
,$connect);



$contador 1;
while(
$row=mysql_fetch_array($topusers))
{
?>
             <tr>
                    <td class="col-cell col-espera"><?php echo $contador ?></td>
                     <td><?php echo $row[autor]; ?></td>   

    
                    <td class="col-cell col-ok"><?php echo $row['validado']; ?></td>
                    <td class="col-cell col-no"><?php echo $row['cancelado']; ?></td>
    
            </tr>
            
<?php
$contador 
$contador 1;
}                    
mysql_free_result($topusers)
?>

Última edición por Most; 26/04/2013 a las 16:50
  #8 (permalink)  
Antiguo 26/04/2013, 16:51
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 3 meses
Puntos: 793
Respuesta: contar resultados repetidos

Te sobra el WHERE estado LIKE '2' y el COUNT(autor ) totpages, y ORDER BY totpages no tienen sentido. Qué intentas hacer?
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #9 (permalink)  
Antiguo 26/04/2013, 17:07
Avatar de Most  
Fecha de Ingreso: marzo-2009
Mensajes: 642
Antigüedad: 15 años, 8 meses
Puntos: 6
Respuesta: contar resultados repetidos

Cita:
Iniciado por andresdzphp Ver Mensaje
Te sobra el WHERE estado LIKE '2' y el COUNT(autor ) totpages, y ORDER BY totpages no tienen sentido. Qué intentas hacer?

WHERE estado LIKE '2' >> solo me muestran los que en estado tengan algun 2 (ya que 2 = verificado)

COUNT(autor ) totpages
COUNT(autor ) totpages
>> esto es para que me muestre los usuarios que mas validados tenga


ORDER BY totpages >> y esto es para que me lo ordene


vamos que en teoria es para que me muestre los top users

los que mas estados = 2 tenga y el recuento de los validados y cancelados.
  #10 (permalink)  
Antiguo 26/04/2013, 18:08
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 3 meses
Puntos: 793
Respuesta: contar resultados repetidos

Así muestras los que tengan 2 validados o más:

Código MySQL:
Ver original
  1. select * from(SELECT autor,
  2. SUM(IF(estado = 2, 1, 0)) validado,  
  3. SUM(IF(estado = 3, 1, 0)) cancelado
  4. FROM top
  5. GROUP BY autor DESC
  6. LIMIT 50) sumas where validado >= 2

y la lista completa es:

Código MySQL:
Ver original
  1. SELECT autor, SUM(IF(estado = 1, 1, 0)) esperando, SUM(IF(estado = 2, 1, 0))
  2.     validado, SUM(IF(estado = 3, 1, 0)) cancelado FROM top GROUP BY autor
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #11 (permalink)  
Antiguo 27/04/2013, 07:29
Avatar de Most  
Fecha de Ingreso: marzo-2009
Mensajes: 642
Antigüedad: 15 años, 8 meses
Puntos: 6
Respuesta: contar resultados repetidos

el problema es que así no me muestra de los que mas validados tienen a los que menos...
  #12 (permalink)  
Antiguo 27/04/2013, 09:48
 
Fecha de Ingreso: septiembre-2011
Mensajes: 480
Antigüedad: 13 años, 2 meses
Puntos: 18
Respuesta: contar resultados repetidos

Código PHP:
Ver original
  1. <?php
  2. $topusers=mysql_query("SELECT autor,estado, COUNT(autor ) total
  3. FROM top
  4. WHERE estado LIKE '2'
  5. GROUP BY autor ORDER BY total DESC
  6. LIMIT 50",$connect);
  7.  
  8. $contador = 1;
  9. $validas=0;
  10. $canceladas=0;
  11. while($row=mysql_fetch_array($topusers))
  12. {
  13. $estado=$row['estado'];
  14. if($estado==3){
  15. $cancelada=$cancelada+1;
  16. }
  17. if($estado==2){
  18. $validas=$validas+1;
  19. }
  20. ?>
  21.  
  22.  
  23.              <tr>
  24.                     <td class="col-cell col-espera"><?php echo $contador ?></td>
  25.                      <td><?php echo $row[autor] ?></td>
  26.                     <td class="col-cell col-ok"><?php echo $validas; ?></td>
  27.                     <td class="col-cell col-no"><?php echo $cancelada ?></td>
  28.             </tr>
  29.            
  30. <?php
  31. $contador = $contador + 1;
  32. }
  33. ?>

Creo que es eso lo que necesitas no?
  #13 (permalink)  
Antiguo 27/04/2013, 10:31
 
Fecha de Ingreso: septiembre-2011
Mensajes: 480
Antigüedad: 13 años, 2 meses
Puntos: 18
Respuesta: contar resultados repetidos

Compañero! por lo que veo ya arregle su problema! pienso yo sin usar muchos recursos de la base de datos y un poco mas de php :D

Código PHP:
Ver original
  1. <?php   $topusers=mysql_query("SELECT autor,estado
  2. FROM top  ORDER BY autor ASC
  3. LIMIT 50");
  4.  
  5.  
  6.  
  7.  
  8. $autores=array();
  9. $cancelada=array();
  10. $valida=array();
  11. while($row=mysql_fetch_array($topusers))
  12. {
  13. $estado=$row['estado'];
  14. $autor=$row['autor'];
  15. if(in_array($autor,$autores)){
  16. $posicion=array_search($autor,$autores);
  17.    
  18. }else{
  19.     array_push($autores,$autor);
  20.     $posicion=array_search($autor,$autores);
  21. }
  22.  
  23. if($estado==3){
  24. array_push($cancelada,$posicion);
  25. }
  26. if($estado==2){
  27. array_push($valida,$posicion);
  28. }
  29.  
  30.  
  31. $contador = $contador + 1;
  32. $validas=0;
  33. $canceladas=0;
  34.  
  35. }
  36. $valores=array_count_values($valida);
  37. $canceladas=array_count_values($cancelada);
  38. $contador=1;
  39. $mayor_validas=0;
  40. $mayor_canceladas=0;
  41. $autor_mayor_validas="";
  42. $autor_mayor_canceladas="";
  43. echo "<table border=1>";
  44. foreach($autores as $autor){
  45. $posicion=array_search($autor,$autores);   
  46. $validas=$valores[$posicion];
  47. $cancela=$canceladas[$posicion];
  48. if($validas>$mayor_validas){
  49. $mayor_validas=$validas;
  50. $autor_mayor_validas=$autor;   
  51. }
  52. if($cancela>$mayor_canceladas){
  53. $mayor_canceladas=$cancela;
  54. $autor_mayor_canceladas=$autor;
  55. }
  56. ?>
  57.  
  58.  
  59.              <tr>
  60.                     <td class="col-cell col-espera"><?php echo $contador ?></td>
  61.                      <td><?php echo $autor; ?></td>
  62.                     <td class="col-cell col-ok">Validas <?php echo $validas; ?></td>
  63.                     <td class="col-cell col-no">Caneladas <?php echo $cancela; ?></td>
  64.             </tr>
  65.            
  66.            
  67. <?php
  68. $contador=$contador+1;
  69. }
  70. echo "</table>";
  71. echo "El autor con mas validas es: ".$autor_mayor_validas." con ".$mayor_validas."<br>";
  72. echo "El autor con mas canceladas es: ".$autor_mayor_canceladas." con ".$mayor_canceladas ;

Cualquier cosa no dude en preguntar! :D

Última edición por edward18_1; 27/04/2013 a las 10:49
  #14 (permalink)  
Antiguo 27/04/2013, 11:02
Avatar de Most  
Fecha de Ingreso: marzo-2009
Mensajes: 642
Antigüedad: 15 años, 8 meses
Puntos: 6
Respuesta: contar resultados repetidos

Gracias por la ayuda, pero solo me salen 2 usuarios y no son los que mas validadas tienen, a parte de que deberían de mostrarse 50 y no 2 jeje.

Gracias.
  #15 (permalink)  
Antiguo 27/04/2013, 11:12
 
Fecha de Ingreso: septiembre-2011
Mensajes: 480
Antigüedad: 13 años, 2 meses
Puntos: 18
Respuesta: contar resultados repetidos

Te explico!...el te muestra es el usuario pero sin repetirse si tienes 20 Maria y 15 Pedro, se mostrara una sola vez Maria y Una sola vez Pedro pero las cantidades validadas si son todas al igual que las cantidades canceladas, y abajo te dice cuales son los usuarios que tienen mayor validadas y mayor canceladas...Cual seria el problema ahora? segun usted q deberia hacer eso?
__________________
Para el logro del triunfo siempre ha sido indispensable pasar por la senda de los sacrificios. Simon Bolivar
  #16 (permalink)  
Antiguo 27/04/2013, 11:58
Avatar de Most  
Fecha de Ingreso: marzo-2009
Mensajes: 642
Antigüedad: 15 años, 8 meses
Puntos: 6
Respuesta: contar resultados repetidos

Cita:
Iniciado por edward18_1 Ver Mensaje
Te explico!...el te muestra es el usuario pero sin repetirse si tienes 20 Maria y 15 Pedro, se mostrara una sola vez Maria y Una sola vez Pedro pero las cantidades validadas si son todas al igual que las cantidades canceladas, y abajo te dice cuales son los usuarios que tienen mayor validadas y mayor canceladas...Cual seria el problema ahora? segun usted q deberia hacer eso?

el problema es que no me muestra los que mas hay, me muestra otros que no son esos.

por que el que mas tiene es un usuario con 270 validados

y se me muestra otro y no ese...
  #17 (permalink)  
Antiguo 27/04/2013, 20:25
 
Fecha de Ingreso: septiembre-2011
Mensajes: 480
Antigüedad: 13 años, 2 meses
Puntos: 18
Respuesta: contar resultados repetidos

Porque no subes tu Base de datos? y nos la pasas para asi trabajar mejor! y ver la solucion!
__________________
Para el logro del triunfo siempre ha sido indispensable pasar por la senda de los sacrificios. Simon Bolivar
  #18 (permalink)  
Antiguo 27/04/2013, 20:59
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: contar resultados repetidos

Mira, ,volviendo al principio de todo, si lo que quieres es esto:
Cita:
Felip tiene 2 validado, 1 esperando
edu tiene 1 esperando, 1 validado, 1 cancelado
manu tiene 3 cancelado
Pero tu query es esta:
Código MySQL:
Ver original
  1. SELECT autor,estado, COUNT(autor ) total
  2. FROM top
  3. WHERE estado LIKE '2'
  4. GROUP BY autor

Eso jamás lo vas a obtener, porque estás excluyendo en ella a todos los estados 1, 3, y cualquier otro que haya (0, NULL). Ergo, eso te devolverá ceros donde haya otros valores.
Lo que más se parece a lo que quieres es lo que te propone @andresdzphp:
Código MySQL:
Ver original
  1.     autor,  
  2.     SUM(IF(estado = 1, 1, 0)) esperando,  
  3.     SUM(IF(estado = 2, 1, 0)) validado,  
  4.     SUM(IF(estado = 3, 1, 0)) cancelado
  5. FROM top
  6. GROUP BY autor

En ese caso, tu objetas que "cancelado" te lo devuelve como cero, pero el error no está en la consulta, sino que tu insistes en poner ese LIKE '2', que no tiene ningún sentido para el resultado que pretendes, como ya te lo expliqué:
Código MySQL:
Ver original
  1.     autor,  
  2.     COUNT(autor ) totpages,
  3.     SUM(IF(estado = 2, 1, 0)) validado,  
  4.     SUM(IF(estado = 3, 1, 0)) cancelado
  5. FROM top
  6. WHERE estado LIKE '2'
  7. GROUP BY autor
  8. ORDER BY totpages DESC
¿Por qué insistes con ese LIKE?
Con sólo suprimirlo, te dará lo que deseas.

Tip final: LIKE se usa exclusivamente con cadenas de texto, y tiene sentido utilizarlo si y sólo si vas a usar comodines ("%"), ya que de lo contrario tiene el mismo efecto que el "=".
Y en tu caso no tiene ningún sentido buscar por un aproximado, porque el valor es puntual.
El LIKE es un vicio de programadores, producto de espantosos manuales que lo incluyen como solución única, sin tomarse el trabajo de aclarar las desventajas que posee a la hora del uso de indices, performance y contexto de uso.
Si no vas a buscar valores aproximados, entonces no lo uses. Es preferible hacer esto:
Código MySQL:
Ver original
  1.     autor,  
  2.     COUNT(autor ) totpages,
  3.     SUM(IF(estado = 2, 1, 0)) validado,  
  4.     SUM(IF(estado = 3, 1, 0)) cancelado
  5. FROM top
  6. WHERE estado = 2 OR estado = 1 OR estado = 3
  7. GROUP BY autor
  8. ORDER BY totpages DESC
O bien esto:
Código MySQL:
Ver original
  1.     autor,  
  2.     COUNT(autor ) totpages,
  3.     SUM(IF(estado = 2, 1, 0)) validado,  
  4.     SUM(IF(estado = 3, 1, 0)) cancelado
  5. FROM top
  6. WHERE estado IN(1, 2, 3)
  7. GROUP BY autor
  8. ORDER BY totpages DESC

Y si vas a usar LIKE usa sólo uno de dos formas: con el comodín al principio o con el comodín al final:
Código MySQL:
Ver original
  1. SELECT a, b, c, d, e
  2. FROM tabla
  3. WHERE e LIKE '%a';
o bien:
Código MySQL:
Ver original
  1. SELECT a, b, c, d, e
  2. FROM tabla
  3. WHERE e LIKE 'a%';
Poner en ambos lados el comodín destruye la performance de la consulta porque hace un full table scan, y además no es razonable por cuestiones de uso de interfaz de los usuarios (la razón es explicación larga, pero la idea es que casi nadie busca algo por el final, sino por el principio del texto, porque es lo que mejor recuerda, y para los otros casos es mejor usar indices FULLTEXT con MATCH() AGAINST(), y no LIKE).

Al usar LIKE con el comodín a un sólo lado, a MySQL le resulta más sencillo usar los índices porque puede buscar el patrón inicial o final más rápidamente, ya que sí aparecerán en los índices creados sobre esos campos, mientras que con ambos comodines no lo puede determinar sin leer el índice entero... y en ese caso descarta el índice y lee toda la tabla.
¿Se entiende la lógica de búsqueda que te digo?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 27/04/2013 a las 21:08
  #19 (permalink)  
Antiguo 28/04/2013, 11:26
Avatar de Most  
Fecha de Ingreso: marzo-2009
Mensajes: 642
Antigüedad: 15 años, 8 meses
Puntos: 6
Respuesta: contar resultados repetidos

Gracias por la cacho de respuesta gnzsoloyo lo he puesto de esta forma:

Código MySQL:
Ver original
  1.     autor,  
  2.     COUNT(autor ) totpages,
  3.     SUM(IF(estado = 2, 1, 0)) validado,  
  4.     SUM(IF(estado = 3, 1, 0)) cancelado
  5. FROM navitool
  6. WHERE estado = 2 OR estado = 3
  7. GROUP BY autor
  8. ORDER BY totpages DESC

pero se me muestra así (No se me muestra de los que mas validados tiene a los menos, no se como me los ordena):

  #20 (permalink)  
Antiguo 28/04/2013, 14:47
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: contar resultados repetidos

Ese ya es otro nivel de problemas...
ORDER BY y GROUP BY no son realmente buenos para combinar, porque suelen tener un resultado inesperado en MySQL al juntarlos.
Lo que te conviene es transformar todo eso en una subconsulta, y aplicar el ORDER BY en esa etapa:
Código MySQL:
Ver original
  1. SELECT autor, totpages, validado, cancelado
  2.   (SELECT
  3.       autor,  
  4.       COUNT(autor ) totpages,
  5.       SUM(IF(estado = 2, 1, 0)) validado,  
  6.       SUM(IF(estado = 3, 1, 0)) cancelado
  7.   FROM navitool
  8.   WHERE estado IN (2, 3)
  9.   GROUP BY autor ) T1
  10. ORDER BY totpages DESC, autor ASC, cancelado DESC
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #21 (permalink)  
Antiguo 28/04/2013, 17:09
Avatar de Most  
Fecha de Ingreso: marzo-2009
Mensajes: 642
Antigüedad: 15 años, 8 meses
Puntos: 6
Respuesta: contar resultados repetidos

Se me sigue mostrando igual con esa consulta
  #22 (permalink)  
Antiguo 28/04/2013, 17:24
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: contar resultados repetidos

Muéstrame el resultado de la consulta cuando la ejecutas desde phpMyadmin.
Sin ver ver lo que realmente devuelve MySQL, no podemos estar completamente seguros, porque el OrDER BY no puede devolver un orden como el que muestras. Al menos no con la ultima versión de consulta que te pasé.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #23 (permalink)  
Antiguo 28/04/2013, 17:35
Avatar de Most  
Fecha de Ingreso: marzo-2009
Mensajes: 642
Antigüedad: 15 años, 8 meses
Puntos: 6
Respuesta: contar resultados repetidos

si lo ejecuto desde el mysql, me da esto:



me cuenta los usuarios que mas se repiten en la base de datos, pero no me lo ordena por lo que se le pide parece, no?
  #24 (permalink)  
Antiguo 28/04/2013, 17:39
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: contar resultados repetidos

Bueno, en esa tabla es evidente que si hay un error de ordenamiento en la vista, no es producto de la consulta, tal como supuse, porque los valores están puestos correctamente: Ordenado de mayor a menor por "totpages", luego por "validado", y recién entonces por "cancelado".
No puedo saber el orden de los "autor", porque no los estás mostrando, o bien no existen (campos vacíos).
Postea lo que muestra el formulario en la vista, y por favor, postea también cómo quedó ahora el código PHP que genera la tabla visual.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #25 (permalink)  
Antiguo 28/04/2013, 17:50
Avatar de Most  
Fecha de Ingreso: marzo-2009
Mensajes: 642
Antigüedad: 15 años, 8 meses
Puntos: 6
Respuesta: contar resultados repetidos

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Bueno, en esa tabla es evidente que si hay un error de ordenamiento en la vista, no es producto de la consulta, tal como supuse, porque los valores están puestos correctamente: Ordenado de mayor a menor por "totpages", luego por "validado", y recién entonces por "cancelado".
No puedo saber el orden de los "autor", porque no los estás mostrando, o bien no existen (campos vacíos).
Postea lo que muestra el formulario en la vista, y por favor, postea también cómo quedó ahora el código PHP que genera la tabla visual.

Te refieres a esto?

Código PHP:
<?php

$topusers
=mysql_query("SELECT autor, totpages, validado, cancelado
FROM 
  (SELECT 
      autor,  
      COUNT(autor ) totpages, 
      SUM(IF(estado = 2, 1, 0)) validado,  
      SUM(IF(estado = 3, 1, 0)) cancelado
  FROM top
  WHERE estado IN (2, 3)
  GROUP BY autor ) T1
ORDER BY totpages DESC, autor ASC, cancelado DESC
LIMIT 50"
,$connect);



$contador 1;
while(
$row=mysql_fetch_array($topusers))
{
?>
             <tr>
                    <td class="col-cell col-espera"><?php echo $contador ?></td>
                     <td><?php echo $row[autor]; ?></td>   

    
                    <td class="col-cell col-ok"><?php echo $row['validado']; ?></td>
                    <td class="col-cell col-no"><?php echo $row['cancelado']; ?></td>
    
            </tr>
            
<?php
$contador 
$contador 1;
}                    
mysql_free_result($topusers)
?>

Cita:
No puedo saber el orden de los "autor", porque no los estás mostrando
Cita:
Postea lo que muestra el formulario en la vista
a que te refieres con esto?
  #26 (permalink)  
Antiguo 28/04/2013, 18:34
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: contar resultados repetidos

La vista es la denominación que se da en las aplicaciones web a lo que el navegador presenta al usuario. En tu caso, es la tabla que el usuario ve, creada con los datos obtenidos en la consulta.
Es lenguaje técnico... Cuando uno dice "vista", normalmente el programador sabe a qué se está refiriendo el otro.

En cuando a lo de a"autor" es simple: Si miras lo que postease de la respuesta de phpMyadmin, verás que la columna "autor" no parece contener ningún dato, por lo que es imposible saber si lo ordena o no por ella.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #27 (permalink)  
Antiguo 28/04/2013, 18:51
Avatar de Most  
Fecha de Ingreso: marzo-2009
Mensajes: 642
Antigüedad: 15 años, 8 meses
Puntos: 6
Respuesta: contar resultados repetidos

Cita:
Iniciado por gnzsoloyo Ver Mensaje
La vista es la denominación que se da en las aplicaciones web a lo que el navegador presenta al usuario. En tu caso, es la tabla que el usuario ve, creada con los datos obtenidos en la consulta.
Es lenguaje técnico... Cuando uno dice "vista", normalmente el programador sabe a qué se está refiriendo el otro.

En cuando a lo de a"autor" es simple: Si miras lo que postease de la respuesta de phpMyadmin, verás que la columna "autor" no parece contener ningún dato, por lo que es imposible saber si lo ordena o no por ella.

Ok, la vista es igual que anteriormente:




aquí la columna con todo (que se muestra el nombre de usuario):

  #28 (permalink)  
Antiguo 28/04/2013, 19:28
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: contar resultados repetidos

Por lo que veo, en realidad es un error de apreciación, porque pides una cosa y muestras otra. Por eso no se ve el ordenamiento.

En síntesis:
1) La consulta funciona perfectamente.
2) Está ordenando cono se le indica: por el total de páginas ("totpages").
3) Ese valor no lo usas jamás en la vista, por lo que no puedes percibir que el orden es exactamente el indicado.
4) ¿Me puedes decir para qué ordenas por la cantidad de registros con valor 2 y 3 sumados, si después no lo utilizas?

Si te fijas con cuidado, "totpages" equivale a la suma de validado+cancelado. Y en ese contexto está realizado el orden...

¿Se entiende?

Si no vas a usar ese valor de suma, y sólo quieres que ordene por la cantidad de validados, eso es lo que debes indicar en la consulta.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #29 (permalink)  
Antiguo 28/04/2013, 19:41
Avatar de Most  
Fecha de Ingreso: marzo-2009
Mensajes: 642
Antigüedad: 15 años, 8 meses
Puntos: 6
Respuesta: contar resultados repetidos

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Por lo que veo, en realidad es un error de apreciación, porque pides una cosa y muestras otra. Por eso no se ve el ordenamiento.

En síntesis:
1) La consulta funciona perfectamente.
2) Está ordenando cono se le indica: por el total de páginas ("totpages").
3) Ese valor no lo usas jamás en la vista, por lo que no puedes percibir que el orden es exactamente el indicado.
4) ¿Me puedes decir para qué ordenas por la cantidad de registros con valor 2 y 3 sumados, si después no lo utilizas?

Si te fijas con cuidado, "totpages" equivale a la suma de validado+cancelado. Y en ese contexto está realizado el orden...

¿Se entiende?

Si no vas a usar ese valor de suma, y sólo quieres que ordene por la cantidad de validados, eso es lo que debes indicar en la consulta.

Exacto, es por eso, por que ordeno por totpages, y esto lo que hace es contarme la cantidad de repetidas que tiene cada autor, verdad?

Entonces, es ese el problema, ya que yo no quiero ordenarlo por la cantidad general, no, por la cantidad de validado(2), como debería de poner la consulta para que se ordene por mayor cantidad de validado ?

Gracias por la paciencia .
  #30 (permalink)  
Antiguo 28/04/2013, 19:56
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: contar resultados repetidos

Cita:
Entonces, es ese el problema, ya que yo no quiero ordenarlo por la cantidad general, no, por la cantidad de validado(2), como debería de poner la consulta para que se ordene por mayor cantidad de validado ?


Pues... es bastante evidente... Quitas esa columna que no usas y lo mandas a ordenar por los validados, como ya te dije.

No creo francamente que necesites que te escriba la consulta para poder hacer eso.



¿No te parece?

Simplemente hazlo, y nos cuentas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: repetidos, resultados, sql, tabla
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 08:45.