Ver Mensaje Individual
  #19 (permalink)  
Antiguo 09/08/2010, 10:53
garciaisidro
 
Fecha de Ingreso: julio-2010
Mensajes: 39
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Contar y Mostrar Registros iguales

Cita:
Iniciado por mortiprogramador Ver Mensaje
hola
bueno, lo que aporta carlos_belisario es interesante para la numeración,
pero si creo entender lo que necesita garciaisidro no se soluciona con eso

ahora, voy a tratar de explicar lo que entendí, por ej tengo esto

Código MySQL:
Ver original
  1. +------------+--------+-----------+
  2. | fecha_sol  | com    | sec       |
  3. +------------+--------+-----------+
  4. | 2010-08-08 | bogota | centro    |
  5. | 2010-08-08 | bogota | centro    |
  6. | 2010-08-08 | bogota | centro    |
  7. | 2010-08-08 | bogota | centro    |
  8. | 2010-08-08 | bogota | centro    |
  9. | 2010-08-08 | bogota | centro    |
  10. | 2010-08-08 | bogota | centro    |
  11. | 2010-08-08 | bogota | centro    |
  12. | 2010-08-08 | bogota | centro    |
  13. | 2010-08-08 | bogota | centro    |
  14. | 2010-08-08 | bogota | unicentro |
  15. | 2010-08-08 | bogota | unicentro |
  16. | 2010-08-08 | bogota | unicentro |
  17. | 2010-08-08 | cali   | centro    |
  18. | 2010-08-08 | bogota | centro    |
  19. +------------+--------+-----------+

y si ejecuto la consulta mas reciente de garciaisidro obtengo esto

Código MySQL:
Ver original
  1. +------------+--------+-----------+----------+
  2. | fecha_sol  | com    | direccion | cantidad |
  3. +------------+--------+-----------+----------+
  4. | 2010-08-08 | bogota | centro    |       11 |
  5. | 2010-08-08 | bogota | unicentro |        3 |
  6. | 2010-08-08 | cali   | centro    |        1 |
  7. +------------+--------+-----------+----------+

si todo lo que explique coincide con lo que se quiere, entonces esto se convierte en un caso de estudio interesante, y yo haría lo siguiente:

usaría esta consulta, y en un ciclo (while por ej) donde manipularia cada registro, haria un if donde revisaría si la cantidad es mayor al limite de registros que se quieren (para este caso 10 y en adelante limite), y si lo es, entonces manejaria una variable (en adelante total) que dividiría la cantidad sobre los registros de cada grupo (10 en este caso) y al resultado (que generalmente será decimal, solo necesitaria la parte entera) le sumaria 1, y luego haria un for que parta desde 1 hasta si es menor o igual al resultado de la operación anterior

y en este for, preguntaria si la variable que itera en el for (en adelante i) es menor a total, y si es verdadero entonces creo un array cuyas keys serían por un lado el com o la dirección, y por el otro el valor de i, y dentro agrego un array asociativo con las posiciones com, sec y cant cuyos valores serán en los 2 primeros campos lo que viene de la base de datos, y en el caso de cant el valor de limite (10)

si es falso, creo el mismo array pero le asigno a cant el resultado de restar el limite contra el resultado de la resta de esta operación:
multiplicar limite por total y a esta multiplicación restarle el campo cantidad de la base de datos

así entonces, tendríamos para el caso de bogotacentro 2 posiciones en el array
bogotacentro (pues son 11 registros) repartidos como se ve a continuación:

Array ( [com] => bogota [sec] => centro [cant] => 10 ) Array ( [com] => bogota [sec] => centro [cant] => 1 )

este if controlara entonces si es mayor a 10 la cantidad del grupo, pero si no es el caso, entonces hacemos un else y creamos el mismo array que hicimos en el if, con la diferencia que cant ya no tendrá nada de operaciones, sino que será igual al campo cantidad que viene del registro de la bd

y pues ya con este super array o colección de arrays, pues no queda mas que con ayuda de ciclos (while, for, o for each) iterar sobre los mismos para mostrar los resultados

enredado?? un poco mientras el teje maneje, y bueno, quedaría algo así

Código PHP:
Ver original
  1. <?php
  2. $limite = 10;
  3. $consulta=mysql_query("SELECT fecha_sol, com, sec AS direccion, COUNT( * ) AS cantidad
  4. FROM solicitar
  5. GROUP BY fecha_sol, com, sec
  6. HAVING fecha_sol = CURDATE( )",$conexion);
  7.  
  8. while ($row = mysql_fetch_array($consulta))
  9. {
  10.     if( $row['cantidad'] > 10 )
  11.     {
  12.         $total = floor(($row['cantidad']) / $limite) + 1;
  13.         for($i = 1; $i <= $total; $i++)
  14.         {
  15.         if( $i < $total ){
  16.             $array[$row['com'].$row['direccion']][$i] = array('com'=>$row['com'],'sec'=>$row['direccion'],'cant'=>$limite);   }        
  17.         else
  18.         {
  19.             $cant = $limite - (($limite * $total) - $row['cantidad']);
  20.             $array[$row['com'].$row['direccion']][$i] = array('com'=>$row['com'],'sec'=>$row['direccion'],'cant'=>$cant);   }
  21.         }
  22.     }
  23.     else
  24.     {
  25.         $array[$row['com'].$row['direccion']][$i] = array('com'=>$row['com'],'sec'=>$row['direccion'],'cant'=>$row['cantidad']);
  26.     }
  27. }
  28.  
  29. //aquí iria el ciclo para mostrar los datos de $array
  30.  
  31. ?>

espero que esto de solución a lo que se quiere, pues siempre me tomó un rato el análisis de este caso,
y el update si también se quiere que sean 10 solamente entonces en efecto como se comento anteriormente,
necesita el limit 10, agregaría un order by el campo que se quiera, y yo agregaría en el where el com por si en algun momento
hay repetición de datos, quedandome por ej algo así

Código MySQL:
Ver original
  1. UPDATE solicitar SET fecha_sol = DATE_ADD(CURDATE(), INTERVAL 3 DAY), procesada = 2 WHERE com = '$var'
  2. AND sec = '$obt_comunidad' ORDER BY campo limit 10

si esto no da solución total, entonces yo propondría modificar el mer de la bd para optimizar el manejo
de este caso, pero esto obviamente viene a modificar también funcionamiento del código

sin embargo prueba y nos comentas
saludos
WOOOWW, AGRADEZCO MUCHO TU GRAN DEDICACION, estuve tratando de implementar tu codigo con el mío y supongo que me perdí en toda la explicacion y no se que me pueda faltar y que me sobra, jajaja, se que es mucho pedir pedir, pero igual no puedo dejar de hacer la pregunta de q si estarias dispuesto a trabajar desde "0" o implementando el codigo que hiciste para lograr lo que necesito, tambien con la base de datos para revises si funcione, yo te diría los campos que uso y tu verias si es necesario trabajar con unos adicionales??? PERO REPITO, SOLO SI TIENES TIEMPO, PORQ COMO HABRAS NOTADO SOY NUEVO EN ESTO DE PROGRAMACION Y TARDARIA MUCHO EN RESOLVERLO... Y NUEVAMENTE GRACIAS POR HABER GASTADO PARTE DE TU TIEMPO EN EXPLICARME y CONSTRUIR EL CODIGO DE ARRIBA