2012-08-17 22 views
7

este es mi código:fetch_array() no preservar ORDER BY de la consulta

<?php 
header("Expires: Mon, 26 Jul 1990 05:00:00 GMT"); 
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
header("Cache-Control: no-store, no-cache, must-revalidate"); 
header("Cache-Control: post-check=0, pre-check=0", false); 
header("Pragma: no-cache"); 

//TESTING CONNECT 
include 'connect.php'; 
$mysqli = connectDB(); 
getWells(2, $mysqli); 

function getWells($company,$mysqli){ 
//include 'connect.php'; 
define("MAX_TOP", 96);//96 INCHES == 8 FEET 
define("BARRELS_PER_INCH", 1.67); 

//$company = $_GET['company']; 
//$mysqli = connectDB(); 

$count = 0; 
$sql = "SELECT wells.id, name, top, bottom, last_pulled, bbl_per_hour 
     FROM wells, history 
     WHERE company_id ='$company' 
     AND wells.id = well_id 
     AND last_record = 1;"; 

if($result = $mysqli->query($sql)) { 
    while($row = $result->fetch_array()){ 
     $well_name = $row['name']; 
     $well_id = $row['id']; 
     $last_bottom = $row['bottom']; 
     $last_pulled = $row['last_pulled']; 
     $bbl = $row['bbl_per_hour']; 

     $projected_fill = MAX_TOP - $last_bottom; 
     $projected_barrels = $projected_fill * BARRELS_PER_INCH; 
     $time_to_fill = $projected_barrels/$bbl; 
     $exploded_time = explode('.', $time_to_fill); 
     $hours = $exploded_time[0];      
     $frac_hours = '.'.$exploded_time[1]; 
     $minutes = floor($frac_hours*60); 
     $projected = strtotime($last_pulled." +".$hours." hours"." +".$minutes." minutes");    
     $projected_datetime = date("Y-m-d H:i:s",$projected);  

     $insert = "INSERT INTO temp_wells (well_id,well_name,last_pull,hrs_to_fill) 
        VALUES ('$well_id','$well_name','$last_pulled','$projected_datetime');"; 
     if(!$result2 = $mysqli->query($insert)){ 
      return "There was a problem inserting data into databse. Contact Larsoon Computer Services. - GetWells.php, Line 57 ".$mysqli->error; 
     } 
     else{ 
      $get_temp = "SELECT * FROM temp_wells 
         ORDER BY hrs_to_fill ASC;"; 
      if(!$result3 = $mysqli->query($get_temp)){ 
       return "There was a problem retrieving data. Contact Larson Computer Services. - GetWells.php, Line 63 ".$mysqli->error; 
      } 
      else{ 
       //echo var_dump($result3); 
       while ($row1 = $result3->fetch_array()) { 
        $o_well_id = $row1['well_id']; 
        $o_well_name = $row1['well_name']; 
        $o_pull_date = $row1['hrs_to_fill']; 

        //TESTING DATA OUTPUT 
        echo $o_well_id; 
        echo '<br>'; 
        echo $o_well_name; 
        echo '<br>'; 
        echo $o_pull_date; 
        echo '<br>'; 
        echo '<br>'; 

        //CREATE THE COUNTDOWN 
        $date = date('U', strtotime($o_pull_date)); 
        $difference = $date - date('U'); 
        $diff_days = floor($difference/(24*60*60)); 
        $diff_hours = floor($difference % (24 * 60 * 60)/3600); 
        $diff_min = floor(($difference % (24 * 60 * 60) % 3600)/60); 
        $diff_secs = floor((($difference % (24 * 60 * 60) % 3600)%60)/1); 

        if($diff_days <= 0){ 
         $countdown = "$diff_hours hrs $diff_min min"; 
        } 
        else{ 
         $countdown = "$diff_days days $diff_hours hrs $diff_min min"; 
        } 
        if($count == 0) { 
         $data_str = $o_well_id.'|'.$o_well_name.'|'.$countdown; 
         $count++; 
        } 
        else { 
         $data_str = $data_str.'|'.$o_well_id.'|'.$o_well_name.'|'.$countdown; 
        } 
       } 
      } 
     } 
     $truncate = "TRUNCATE TABLE temp_wells;"; 
     if(!$result4 = $mysqli->query($truncate)){ 
      return "There was a problem truncating table. Contact Larson Computer Services. ".$mysqli->error; 
     } 
    } 
}//END OF IF 
if($data_str == null && $data_str == ""){ 
    $data_str = 0; 
} 
return $data_str; 
} 

?> 

Produce:

1 
ATESTWELL 
2012-08-17 14:55:37 

3 
HAMLET 1-11H 
2012-08-17 17:40:00 

4 
HAMLET 2-11H 
2012-08-17 18:47:14 

8 
DANIEL 1-33H 
2012-08-17 13:15:39 

6 
DANIEL 21-33H 
2012-08-19 13:47:16 

9 
FAVER 1-29H 
2012-08-17 14:31:00 

la tabla siguiente aspecto:

well_id  int(11) 

well_name varchar(50) 

last_pull datetime 

hrs_to_fill datetime 

Lo cual no es ordenado por datetime field como debería ser. Ejecutar la consulta en PHPMyadmin funciona bien, pero este código no es ... ¿Alguna idea?

Gracias,

Luis

+2

¿Se puede publicar la vista de diseño de la tabla que está consultando? ¿Cuál es el tipo de datos de hrs_to_fill? – mithilatw

+1

Lo más probable es que ejecutes un código diferente al que publicaste. Asegúrese de que el archivo PHP que ejecuta es el que desea. Otra opción es que el navegador guarde en caché la página. – Andy

+0

que si te asusta? – LouieV

Respuesta

1

Sus datos se ordenó realidad; si miras de cerca, verás que para cada pozo se ordena según la fecha/hora. La razón es que tienes dos bucles, el bucle interno se ejecuta tres veces, uno por cada pozo.

Es posible que tenga que mover el bucle interno después del bucle externo, de modo que complete la tabla temp_wells en el primer bucle y consulte en el segundo.

+0

¡Correcto! para cada 'pozo',' hrs_to_fill' está ordenado (ver HAMLET y DANIEL) – zessx

+0

He movido un poco el código de un bucle a otro varias veces y terminé mezclando el código. De todos modos, gracias a todos por su aporte – LouieV

Cuestiones relacionadas