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+------------+--------+-----------+
| fecha_sol | com | sec |
+------------+--------+-----------+
| 2010-08-08 | bogota | centro |
| 2010-08-08 | bogota | centro |
| 2010-08-08 | bogota | centro |
| 2010-08-08 | bogota | centro |
| 2010-08-08 | bogota | centro |
| 2010-08-08 | bogota | centro |
| 2010-08-08 | bogota | centro |
| 2010-08-08 | bogota | centro |
| 2010-08-08 | bogota | centro |
| 2010-08-08 | bogota | centro |
| 2010-08-08 | bogota | unicentro |
| 2010-08-08 | bogota | unicentro |
| 2010-08-08 | bogota | unicentro |
| 2010-08-08 | cali | centro |
| 2010-08-08 | bogota | centro |
+------------+--------+-----------+
y si ejecuto la consulta mas reciente de
garciaisidro obtengo esto
Código MySQL:
Ver original+------------+--------+-----------+----------+
| fecha_sol | com | direccion | cantidad |
+------------+--------+-----------+----------+
| 2010-08-08 | bogota | centro | 11 |
| 2010-08-08 | bogota | unicentro | 3 |
| 2010-08-08 | cali | centro | 1 |
+------------+--------+-----------+----------+
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<?php
$limite = 10;
$consulta=mysql_query("SELECT fecha_sol, com, sec AS direccion, COUNT( * ) AS cantidad FROM solicitar
GROUP BY fecha_sol, com, sec
HAVING fecha_sol = CURDATE( )",$conexion);
{
if( $row['cantidad'] > 10 )
{
$total = floor(($row['cantidad']) / $limite) + 1; for($i = 1; $i <= $total; $i++)
{
if( $i < $total ){
$array[$row['com'].$row['direccion']][$i] = array('com'=>$row['com'],'sec'=>$row['direccion'],'cant'=>$limite); } else
{
$cant = $limite - (($limite * $total) - $row['cantidad']);
$array[$row['com'].$row['direccion']][$i] = array('com'=>$row['com'],'sec'=>$row['direccion'],'cant'=>$cant); } }
}
else
{
$array[$row['com'].$row['direccion']][$i] = array('com'=>$row['com'],'sec'=>$row['direccion'],'cant'=>$row['cantidad']); }
}
//aquí iria el ciclo para mostrar los datos de $array
?>
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í
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