2012-08-17 13 views
7

to mój kod:fetch_array() nie zachowując ORDER BY z zapytaniem

<?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; 
} 

?> 

Produkuje:

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 

tabela wygląda następująco:

well_id  int(11) 

well_name varchar(50) 

last_pull datetime 

hrs_to_fill datetime 

co nie jest uporządkowane według pole datetime, tak jak powinno być. Uruchamianie kwerendy na PHPMyadmin działa dobrze, ale ten kod nie jest ... Wszelkie myśli?

Dzięki,

Luis

+2

Czy możesz opublikować widok projektu tabeli, której dotyczy zapytanie? jaki jest typ danych hrs_to_fill? – mithilatw

+1

Najprawdopodobniej wykonasz kod inny niż ten, który wysłałeś. Upewnij się, że plik PHP, który wykonujesz, jest tym, który chcesz. Inną opcją jest strona buforowana przez przeglądarkę. – Andy

+0

co jeśli cię przeraża? – LouieV

Odpowiedz

1

Twoje dane są właściwie uporządkowane; jeśli przyjrzysz się uważnie, zobaczysz, że dla każdej studni sortuje się na podstawie daty/czasu. Powodem jest to, że masz dwie pętle, wewnętrzna pętla zostaje uruchomiona trzy razy, po jednej dla każdej studni.

Być może będziesz musiał przenieść wewnętrzną pętlę za zewnętrzną pętlą, aby wypełnić tabelę temp_wells w pierwszej pętli i przesłać ją w drugim.

+0

Prawidłowo! dla każdego 'well',' hrs_to_fill' jest uporządkowany (zobacz HAMLET i DANIEL) – zessx

+0

Kilka razy przeniosłem kod z jednej pętli na drugą i skończyło się miksowaniem kodu. W każdym razie dziękuję wszystkim za twój wkład – LouieV

Powiązane problemy