Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] For en lugar de Do While

Estas en el tema de For en lugar de Do While en el foro de PHP en Foros del Web. Hola que tal bueno la cuestión es la siguiente tengo que sacar de mi base de datos por lo cual normal mete utilizo do while ...
  #1 (permalink)  
Antiguo 04/09/2013, 16:06
Avatar de emilio_viguri  
Fecha de Ingreso: junio-2011
Ubicación: Mexico
Mensajes: 116
Antigüedad: 12 años, 10 meses
Puntos: 3
Pregunta For en lugar de Do While

Hola que tal bueno la cuestión es la siguiente tengo que sacar de mi base de datos por lo cual normal mete utilizo do while para sacar los datos pero a hora se me ocurrió usar un for ya que necesito ver que números me faltan entre un rango determinado me explico con un pequeño ejemplo

Yo tengo en la base de datos 2 4 6 8 10

Yo pido en mi consulta que me indique los datos del 1 al 10 por lo cual me tendría que arrojar 2 4 6 8 10

Y en mi php pondría que me faltan los siguientes números 1 3 5 7 9

Por eso uso un for para hacer una búsqueda del 1 al 10 de los datos obtenidos

for del 1 al 10
IF (si esta pon numero)
else (si no pon una X y el numero faltante)

me explcio todo esto sale de una base de datos pero necesito ver que consecutivos faltan

Hay otro codigo hay que es para generar una tabla para acomodar los datos pero eso no tengo problemas...

Código PHP:
Ver original
  1. $nc=10; #Numero de Columnas solo numeros pares.
  2.     $iniciorr=$finrr=$i=$sirr=$norr=$tr=$td=0;
  3.  
  4.     $iniciorr = $_POST['inicio']+0;
  5.     $finrr = $_POST['final']+0;
  6.  
  7. #   $iniciorr = 200;
  8. #   $finrr = 500;
  9. ?>     
  10. <table border="0" align="center" cellpadding="3" cellspacing="3">
  11.   <tr>
  12. <?
  13.         for($i=$iniciorr; $i<=$finrr; $i++){
  14.             $td++;         
  15.             if($tr){ echo '<tr>'; $tr=0; }
  16.             if($td<=$nc) echo '<td align="center">';
  17. #contenido y analisis de remiciones.
  18.             if(isset($iniciorr)){
  19.                 $queryF = "
  20. SELECT DISTINCT Rrappyd AS RR
  21. FROM partidas
  22. WHERE
  23. CAST(MID(Rrappyd, 3, LENGTH(Rrappyd)-2) AS UNSIGNED) BETWEEN $iniciorr AND $finrr
  24. ORDER BY Rrappyd";
  25. Rrappyd LIKE '__$i'";
  26.                 $dato = mysql_query($queryF, $conremision);
  27.                 $row = mysql_fetch_assoc($dato);
  28.             }
  29.        
  30.             if($row["RR"] == NULL){
  31.                 echo 'X'.$i.'X';
  32.                 $norr++;
  33.             }else{
  34.                 echo '<strong>'.$row["RR"].'</strong>';
  35.                 $sirr++;
  36.             }
  37. #           echo '&nbsp;'.$i.'&nbsp;';
  38.  
  39. ############################
  40.  
  41.             if($td<=$nc) echo '</td>';
  42.             if($td==$nc){ echo '</tr>'; $td=0; $tr=1; }        
  43.            
  44.         }
  45.        
  46.         if($td>1 and $tr=0) echo '</tr>';
  47. ?>     
  48.   </table>

Lo que pasa con esto es que simpre me arroja el primer dato que contiene $row y no pone los consecutivos entonces como muevo el indice de mi row ?

o tiene alguna otra idea de como pueda hacer esto ?
  #2 (permalink)  
Antiguo 05/09/2013, 09:06
Avatar de emilio_viguri  
Fecha de Ingreso: junio-2011
Ubicación: Mexico
Mensajes: 116
Antigüedad: 12 años, 10 meses
Puntos: 3
Pregunta Respuesta: For en lugar de Do While

Bueno como esplique solo basicamente necesitaria hacer esto

simplemente esto ....

$queryF = "SELECT DISTINCT Rrappyd AS RR FROM partidas WHERE
CAST(MID(Rrappyd, 3, LENGTH(Rrappyd)-2) AS UNSIGNED) BETWEEN $iniciorr AND $finrr ORDER BY Rrappyd";

$dato = mysql_query($queryF, $conremision);
$row = mysql_fetch_assoc($dato);


for del 1 al 50
IF(isset($row[$i])) si el dato esta mi Base da tatos imprime (Numero si esta) 1,2,3, si esta
else (si no pon una X y el numero faltante) X4, X5, X6



como hago para los datos obtenido de mi consulta pasarlos por un for para hacer esto ?
  #3 (permalink)  
Antiguo 05/09/2013, 09:08
 
Fecha de Ingreso: agosto-2013
Mensajes: 150
Antigüedad: 10 años, 8 meses
Puntos: 29
Respuesta: For en lugar de Do While

Idea:
Código PHP:
Ver original
  1. $datos = array(2, 4, 6, 8, 10);
  2.  
  3. for ($i = 0; $i <= 10; $i++) {
  4.    if(in_array($i, $datos)) {
  5.       echo $i;
  6.    } else {
  7.       echo ' X ';
  8.    }
  9. }
  #4 (permalink)  
Antiguo 05/09/2013, 09:27
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: For en lugar de Do While

El problema es que mysql_fetch_assoc es para usarse con while, si quieres usar otros ciclos como foreach o for debes de migrar tus funciones mysql_* a mysqli o PDO por dos razones una ya que te permiten trabajar de maneras distintas con los resultados que obtienes y segundo mysql_* esta obsoleta y dentro de poco lo eliminaran.

Los segundo que puedes hacer es algo como esto:

Código PHP:
Ver original
  1. $i = 1;
  2. while($row = mysql_fetch_assoc($dato)){
  3.     if($i == $row['id']){
  4.         echo "{$i} existe en la bd<br>";
  5.     }else{
  6.         echo "No existe {$i} en la bd<br>";
  7.     }
  8.     $i++;
  9. }

Esa seria una idea

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #5 (permalink)  
Antiguo 05/09/2013, 15:31
Avatar de emilio_viguri  
Fecha de Ingreso: junio-2011
Ubicación: Mexico
Mensajes: 116
Antigüedad: 12 años, 10 meses
Puntos: 3
Pregunta Respuesta: For en lugar de Do While

Cita:
Iniciado por jonni09lo Ver Mensaje
El problema es que mysql_fetch_assoc es para usarse con while, si quieres usar otros ciclos como foreach o for debes de migrar tus funciones mysql_* a mysqli o PDO por dos razones una ya que te permiten trabajar de maneras distintas con los resultados que obtienes y segundo mysql_* esta obsoleta y dentro de poco lo eliminaran.

Los segundo que puedes hacer es algo como esto:

Código PHP:
Ver original
  1. $i = 1;
  2. while($row = mysql_fetch_assoc($dato)){
  3.     if($i == $row['id']){
  4.         echo "{$i} existe en la bd<br>";
  5.     }else{
  6.         echo "No existe {$i} en la bd<br>";
  7.     }
  8.     $i++;
  9. }

Esa seria una idea

Saludos
Ok si uso este método como limito los rangos es lo que no veo ...

del rango 1 al 50 supongamos y que solo tengo datos en la base de datos del 20 al 30 me tendira que arrojar algo asi amigo

1 al 19 no existe
20 al 30 si existe
31 al 50 no existe

x1 x2 x3 ... 20 21 22 ... x31 x32 x33 ... etc

  #6 (permalink)  
Antiguo 05/09/2013, 15:37
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: For en lugar de Do While

No entiendo muy bien tu planteamiento, pero el rango lo deberias especificar en el if...

Código PHP:
Ver original
  1. if($i == $row['id'] && ($i > 0 && $i < 10) ){
  2.    
  3. }

Aunque me gustaria que me especificaras bien como si yo fuese un niño de 5 años :P ando medio dormido

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #7 (permalink)  
Antiguo 05/09/2013, 16:09
Avatar de emilio_viguri  
Fecha de Ingreso: junio-2011
Ubicación: Mexico
Mensajes: 116
Antigüedad: 12 años, 10 meses
Puntos: 3
Respuesta: For en lugar de Do While

Cita:
Iniciado por jonni09lo Ver Mensaje
No entiendo muy bien tu planteamiento, pero el rango lo deberias especificar en el if...

Código PHP:
Ver original
  1. if($i == $row['id'] && ($i > 0 && $i < 10) ){
  2.    
  3. }

Aunque me gustaria que me especificaras bien como si yo fuese un niño de 5 años :P ando medio dormido

Saludos
Ok yo pido un rango del 1 al 15

esto lo pongo en un query y me arroja los datos únicos que encuentra su pongamos que solo tengo en la base de datos del 5 al 9 si lo pongo en un do while normal me sacaria 5,6,7,8,9 = row

pero yo pedi informacion del 1 al 15 por lo cual requiero saber si esta el 1, 2, 3 ... etc

ejemplo...

no1, no2, no3, no4, 5, 6 ,7 ,8 ,9, no10, no11, no12, no13, no14, no15

Por eso la insistencia de usar un for por que asi puedo saber que datos hay en mi tabla y que datos faltan me explicó a hora ?

si fuere en codigo que me funcionara seria

$datos = query(cosnsulta con el arreglo de datos);

for (inicio al final) {
if(datos existe ($i, $datos)) {
echo $i;
} else {
echo ' X$i ';
}
}
  #8 (permalink)  
Antiguo 05/09/2013, 16:13
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: For en lugar de Do While

Hacer eso bajo la estrcutura de musql_* es complejo como ya te habia dicho, se me ocurren varias ideas, mas no es lo más optimo, asi que queda en tu disposicion si migrar (que seria lo mejor por lo que te habia dicho) o dar muchas vueltas y hacerlo bajo mysql_*

Así que dime que harás y a partir de allí te propongo que hacer.

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #9 (permalink)  
Antiguo 05/09/2013, 21:19
 
Fecha de Ingreso: julio-2013
Ubicación: México
Mensajes: 361
Antigüedad: 10 años, 8 meses
Puntos: 55
Respuesta: For en lugar de Do While

Hola,
Pon el resultado en un array y lUego haces un for.

Código PHP:
Ver original
  1. $i = 1;
  2.     while($row = mysql_fetch_assoc($dato)){
  3.         $RESULT[$row['id']]=$row;
  4.     }
  5. for($a.....){
  6. if($RESULT[$a]){......}else{......}
  7. }
Saludos
  #10 (permalink)  
Antiguo 07/09/2013, 01:29
 
Fecha de Ingreso: agosto-2013
Mensajes: 150
Antigüedad: 10 años, 8 meses
Puntos: 29
Respuesta: For en lugar de Do While

El problema es que mysqly no tiene una función propia para cargar todos los registros en un array de una vez, como fetchAll() en PDO u otra en mysqli. Por eso, y porque le van a colgar el cartel de obsoleto, te conviene migrar como te sugiere jonni09lo.
No obstante se puede utilizar for() con arrays asociativos, pero primero es necesario cargar un array con todos los registros.

for() con array asociativo:
Código PHP:
Ver original
  1. /** campo números en la BBDD **/
  2. // ( [key 1] => 2 [key 2] => 4 [key 3] => 6 [key 4] => 8 [key 5] => 10 )
  3.  
  4. $sql = "SELECT indice,valor FROM `numeros`;";
  5. $query = mysql_query($sql, $conn);
  6.  
  7. /** forma básica de una función que no tiene mysql **/
  8. function mysqly_all_assoc($query) {
  9.    while ($row = mysql_fetch_assoc($query)) {
  10.       $rs[$row['indice']] = $row['valor'];
  11.    }
  12.    return $rs;
  13. }
  14.  
  15. //$rs = mysqly_all_assoc($query);
  16.  
  17. /** reemplaza a: $rs = mysqly_all_assoc($query); **/
  18. $rs = array(
  19. 'key 1' => 2,
  20. 'key 2' => 4,
  21. 'key 3' => 6,
  22. 'key 4' => 8,
  23. 'key 5' => 10);
  24.  
  25. for ($i = 1; ($i <= 15); $i++, $e++) {
  26.    //($row(mysql_fetch_assoc($rs)));
  27.    if (in_array($i, $rs)) {
  28.       echo key($rs) . ':' . current($rs);
  29.       next($rs);
  30.    } else {
  31.       echo 'no:' . $i;
  32.    }
  33.    echo '<br />';
  34. }

Última edición por bathorz; 07/09/2013 a las 06:50
  #11 (permalink)  
Antiguo 18/09/2013, 15:28
Avatar de emilio_viguri  
Fecha de Ingreso: junio-2011
Ubicación: Mexico
Mensajes: 116
Antigüedad: 12 años, 10 meses
Puntos: 3
Respuesta: For en lugar de Do While

Disculpen me tarde pero lo solucione asi

Código PHP:
Ver original
  1. <?
  2. if(isset($iniciorr)):
  3.     mysql_select_db($database_conremision, $conremision);
  4.     $queryF = "SELECT DISTINCT Rrappyd AS RR FROM partidas WHERE CAST(MID(Rrappyd, 2, LENGTH(Rrappyd)-1) AS UNSIGNED) BETWEEN $iniciorr AND $finrr ORDER BY Rrappyd";
  5.     $dato = mysql_query($queryF, $conremision) or die(mysql_error());
  6.     do{
  7.         if(isset($row['RR'])){
  8.                 $idarray = str_replace("T", "", $row["RR"]);
  9.             $idarray += 0;
  10.             $idarray.'<br>';
  11.             $RR[$idarray] = $row["RR"];
  12.         }
  13.     } while ($row = mysql_fetch_assoc($dato));
  14.  
  15. for($i=$iniciorr; $i<=$finrr; $i++):
  16.     #contenido y analisis de remiciones.
  17.     if($RR[$i] == NULL){
  18.         echo $i;
  19.         $norr++;
  20.     }else{
  21.         echo '<strong><a href="remisionrappyd.php?Rrappyd='.$RR[$i].'" target="Rrappyd">'.$RR[$i].'</strong>';
  22.         $sirr++;
  23.     }
  24.  
  25. ############################
  26.     if($td<=$nc) echo '</td>';
  27.     if($td==$nc){ echo '</tr>'; $td=0; $tr=1; }
  28.  
  29. endfor; if($td>1 and $tr=0) echo '</tr>';
  30. ?>

Etiquetas: lugar, mysql, select, 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




La zona horaria es GMT -6. Ahora son las 06:09.