mysqli_query mysqli_num_rows mysqli_fetch_array fetch_array ejemplos ejemplo assoc array all php mysql mysqli

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.