php - mysqli_fetch_array - mysqli_num_rows
fetch_array() no conserva ORDEN POR consulta (1)
este es mi código:
<?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 mesa se ve así:
well_id int(11)
well_name varchar(50)
last_pull datetime
hrs_to_fill datetime
Que no está ordenado por el campo datetime como debería ser. Ejecutar la consulta en PHPMyadmin funciona bien, pero este código no es ... ¿Alguna idea?
Gracias,
Luis
Sus datos están realmente ordenados; 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.
Puede que tenga que mover el bucle interno después del bucle externo, de modo que temp_wells
tabla temp_wells
en el primer bucle y consulte en el segundo.