Php fetch_array()不保留查询的顺序

Php fetch_array()不保留查询的顺序,php,mysql,mysqli,Php,Mysql,Mysqli,这是我的代码: <?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);

这是我的代码:

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

?>
该表如下所示:

well_id     int(11)

well_name   varchar(50)

last_pull   datetime

hrs_to_fill datetime
它不像应该的那样按日期时间字段排序。在PHPMyadmin上运行查询工作正常,但此代码不是。。。有什么想法吗

谢谢


Luis

您的数据实际上是有序的;如果你仔细观察,你会发现每口井都是根据日期/时间排序的。原因是你有两个循环,内部循环运行三次,每口井一次


您可能需要在外循环之后移动内循环,以便在第一个循环中填充
临时井
表,并在第二个循环中查询它。

您可以发布正在查询的表的设计视图吗?要填写的hrs_的数据类型是什么?很可能您执行的代码与发布的代码不同。确保您执行的PHP文件是您想要的。另一个选项是浏览器缓存的页面。@LouieV,根据您的代码,每次运行insert后都会截断temp_wells表。你怎么会有不止一行呢?@Andy因为我需要计算$projected_datetime->insert to temp->fetch with order by的数据性质。同样在我截短之前,我正在进行提取,但没有提取订单如果
$company
O'Crockety's Bucket Co.
?不消毒不是为了防止攻击者,而是为了防止bug。对这件事马虎是没有理由的。对!对于每个
hrs\u-to\u-fill
(参见哈姆雷特和丹尼尔)我将一些代码从一个循环移动到另一个循环几次,最后混合了代码。无论如何,谢谢大家的意见
well_id     int(11)

well_name   varchar(50)

last_pull   datetime

hrs_to_fill datetime