7.5k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von max1511 Einsteiger_in (47 Punkte)
Hallo Zusammen

Ich hab das Problem, dass eine PHP Datei Werte von der MySQL holt. MySQL 5.x hat, so viel ich verstanden habe, den maximalwert von 838:59:59. Die Werte werden mit den folgenden Zeilen geholt:

$query = "SELECT sec_to_time(sum(time_to_sec(TotalBlockTime))) FROM flights ".$condition;
$result=mysql_query($query);
$TFT = mysql_result($result,0);

Ehrlich gesagt, hab ich keine Ahnung in diesem Gebiet. Wie muss der Code lauten, damit die PHP Datei einen höheren Wert als 838:59:59 anzeigen kann, z.B. 901:15:31?

Grüsse
Alexander

21 Antworten

0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Unmöglich.

Einfachste Mathematik. Sekunden in HH:MM:SS aufteilen. Hast bestimmt "die Anleitung eingefügt" - aber nicht gelesen!
Wir haben uns bereits im Kreis gedreht - einfacher kann ich es dir nicht erklären.

Alternative: du zeigst alle Stellen auf die du definitiv nicht verstehst.
0 Punkte
Beantwortet von max1511 Einsteiger_in (47 Punkte)
Also, ich habe direkt nach <?php den Code
function int_int_divide( $x, $y ) {
return ( $x- ( $x% $y ) )/ $y;
}

function give_zeit( $zahl ) {
$seconds= $zahl% 60;
$zahl= int_int_divide( $zahl, 60 );
$minutes= $zahl% 60;
$zahl= int_int_divide( $zahl, 60 );
$hours= $zahl;

return sprintf( '%02d:%02d:%02d', $hours, $minutes, $seconds );
}


eingefügt. Ist also relativ am Anfang.

Dann hab ich diesen Code:
$query = "SELECT sec_to_time(sum(time_to_sec(TotalBlockTime))) FROM flights ".$condition;
$result=mysql_query($query);
$TFT = mysql_result($result,0);


durch diesen ersetzt:
$query= 'SELECT sum( time_to_sec( TotalBlockTime ) ) FROM flights '. $condition;
$result= mysql_query( $query );
$zahl= mysql_result( $result, 0 );
$text= give_zeit( $zahl );


Weiter habe ich diesen Code:
echo '<br><table width="300" cellspacing="1" cellpadding="2" align="center" style="font: normal 11px/14px Arial,sans-serif;padding:7px 7px 7px 7px">'.$TDListOdd.
"<div align=\"center\"><strong><u>Virtual Airline Statistics</u></strong><br>".
"Total flights".$startMsg.": $NrfFlights<br>
Total flight time: $TFT h<br>
Total passengers carried: $TPC<br>
Total Cargo carried: $TCW</div>".
$ListStop;
echo "<br>";
durch diesen ersetzt (wegen dem $TFT, diesen Zeigt die erste Anfrage):
echo '<br><table width="300" cellspacing="1" cellpadding="2" align="center" style="font: normal 11px/14px Arial,sans-serif;padding:7px 7px 7px 7px">'.$TDListOdd.
"<div align=\"center\"><strong><u>Virtual Airline Statistics</u></strong><br>".
"Total flights".$startMsg.": $NrfFlights<br>
Total flight time: $text h<br>
Total passengers carried: $TPC<br>
Total Cargo carried: $TCW</div>".
$ListStop;
echo "<br>";


Dann als zuletzt weiter unten diesen Code:
$query = "SELECT PilotName, COUNT(PilotName) as TnF, SEC_TO_TIME(SUM(TIME_TO_SEC(TotalBlockTime))) AS TTotalBlockTime, SUM(NbrPassengers) AS TNbrPassengers, SUM(BonusPoints) AS TBonusPoints, SUM(PenalityPoints) AS TPenalityPoints, SUM(BonusPoints - PenalityPoints) AS TotalPoint FROM flights GROUP BY PilotName ORDER BY $sortColumn LIMIT $pStart,$pageLines";
if(!$result=mysql_query($query))
{
echo "SQL Error - ".mysql_error()."<br>".$query;
return;
}


durch diesen ersetzt:

$query = "SELECT PilotName, COUNT(PilotName) as TnF, SUM(TIME_TO_SEC(TotalBlockTime)) AS TTotalBlockTime, SUM(NbrPassengers) AS TNbrPassengers, SUM(BonusPoints) AS TBonusPoints, SUM(PenalityPoints) AS TPenalityPoints, SUM(BonusPoints - PenalityPoints) AS TotalPoint FROM flights GROUP BY PilotName ORDER BY $sortColumn LIMIT $pStart,$pageLines";
$result= mysql_query( $query );
$zahl= mysql_result( $result, 0 );
$text= give_zeit( $zahl );
if(!$result=mysql_query($query))
{
echo "SQL Error - ".mysql_error()."<br>".$query;
return;
}


Und das Resultat ist wie gesagt, dass die erste Anfrage korrekt in HH:MM:SS angezeit wird, die zweite jedoch weiterhin als Sekunden.

Zweite Anfrage:
$query = "SELECT PilotName, COUNT(PilotName) as TnF, SUM(TIME_TO_SEC(TotalBlockTime)) AS TTotalBlockTime, SUM(NbrPassengers) AS TNbrPassengers, SUM(BonusPoints) AS TBonusPoints, SUM(PenalityPoints) AS TPenalityPoints, SUM(BonusPoints - PenalityPoints) AS TotalPoint FROM flights GROUP BY PilotName ORDER BY $sortColumn LIMIT $pStart,$pageLines";
$result= mysql_query( $query );
$zahl= mysql_result( $result, 0 );
$text= give_zeit( $zahl );


So, was hätte ich nun falsch eingefügt?
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Sehr schön.

Dann als zuletzt weiter unten diesen Code:
Bis hierhin ist alles richtig. Der nachfolgende Code-Teil von mir, der deinen ersetzt ist in diesem Fall unpassend.

Zweite Anfrage:
Hier sehe ich weder, wo du $text verwendest, noch wie deine eigentliche zweite Abfrage aussieht. Was ich aber jetzt erahne zu erkenne ist, dass du eine Abfrage machst, die mehrere Ergebnisse liefern kann. Sei also so nett und poste den Teil vom Anfang des SQL-Statements der "zweiten Abfrage" inklusive der vermutlich nachfolgenden Schleife. Wenn du mehrere Ergebnisse hast musst du ja auch mehrfach HTML-Code ausgeben.

Konkret meine ich damit, dass unter
{
echo "SQL Error - ".mysql_error()."<br>".$query;
return;
}
noch mehr Code kommt, vermultich in der Form
while ( $zeile= mysql_fetch_array( $result ) ) {
...
}
mysql_free_result( $result );
Kann auch sein, dass das ganz anders aussieht bei dir und derzeit eigentlich alles andere als effektiv abläuft... am besten beantwortest du meine Frage (mehrere Ergebnisse?).
0 Punkte
Beantwortet von max1511 Einsteiger_in (47 Punkte)
So sieht es aus ab der zweiten Abfrage:
$query = "SELECT PilotName, COUNT(PilotName) as TnF, SUM(TIME_TO_SEC(TotalBlockTime)) AS TTotalBlockTime, SUM(NbrPassengers) AS TNbrPassengers, SUM(BonusPoints) AS TBonusPoints, SUM(PenalityPoints) AS TPenalityPoints, SUM(BonusPoints - PenalityPoints) AS TotalPoint FROM flights GROUP BY PilotName ORDER BY $sortColumn LIMIT $pStart,$pageLines";
$result= mysql_query( $query );
$zahl= mysql_result( $result, 0 );
$text= give_zeit( $zahl );
if(!$result=mysql_query($query))
{
echo "SQL Error - ".mysql_error()."<br>".$query;
return;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////// LIST TABLE OUTPUT ///////////////////////////////////////////////////////////////
echo $paging_Html;

echo $ListStart.$TableVA;

if ($NrfFlights>0) {
$Line=0;
// loop to display all rows
while ($row = mysql_fetch_assoc($result))
{
echo $TRList;
// loop to display all columns using function "makeTD()"
for($i=0;$i<count($PilotFieldNames);$i++)
{
if ($PilotFieldNames[$i]=='PilotName')
{
echo makeTD1($row[$PilotFieldNames[$i]],$PilotFieldNames[$i],$Line,$row['PilotName']); // this TD is linked by FlightId
} else {
echo makeTD1($row[$PilotFieldNames[$i]],$PilotFieldNames[$i],$Line);
// echo '<td nowrap style="background-color:red;padding:1px 5px 1px 5px">'.$row[[$i]].'</td>'.chr(13);
}
}
echo '</tr>';
$Line=!$Line;
}
}
else
{
echo '<tr><td colspan="'.count($PilotFieldNames).'" align="center"><br>There are no flights recorded.</td></tr>';
}

echo $ListStop;

echo $paging_Html;
///////////////////////////////////////////////////////////////////////////////////////////////////////


}

if( (!isset($listflight)) and (!isset($pilotflight)) ) return;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////


if(isset($pilotflight))
{

// PAGING /////////////////////////////////////////////////////////////////////////////////////////
//
// set max page numbers displayed at a time (to avoid line breaks in the paging)
$maxPage = 20;
$pageStep = 10;
$pStart = 0;
////////////////////////////////////////////////////////////////////////////////////////////////////////
$query = "SELECT * FROM flights WHERE PilotName LIKE '%$pilotflight%' ";
if(!$result=mysql_query($query))
{
echo "SQL Error - ".mysql_error()."<br>".$query;
return;
}
$NrfFlights=mysql_num_rows($result);
if($NrfFlights==0){echo "No flights to display";return;}


///////////////////////////////////////////////////////////////////////////////////////////////////////
0 Punkte
Beantwortet von max1511 Einsteiger_in (47 Punkte)
Sorry, hab grad gesehen dass es weitere Anfragen mit
$query = "SELECT
vorkommen.
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Du musst lediglich Ausschau nach $row['PilotName'] halten und jedes davon durch give_zeit( $row['PilotName'] ) ersetzen.
Wird jetzt allmählich klar, wie das ganze funktioniert?
0 Punkte
Beantwortet von max1511 Einsteiger_in (47 Punkte)
Leider eher nicht. $row['PilotName'] gabs nur einen im ganzen PHP. Ersetzt, aber die zweite Anfrage bleibt immer noch in Sekunden. Falls dir das hilft, geb ich dir den Link der PHP-Datei an, natürlich aber als TXT Datei: www.jagsite.ch/DE/Diverses/FsPlistflight.txt So sieht der momentane Zustand der PHP aus.
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Mein Fehler. PilotName macht auch keinen Sinn, nicht wahr? Dahinter steckt Text und keine Zeit.

Such nach $row['TTotalBlockTime'] (jetzt nicht exakt so, wer weiß mit wievielen Leerzeichen das wo und wie geschrieben ist) und ersetz es durch give_zeit( $row['TTotalBlockTime'] ).
0 Punkte
Beantwortet von max1511 Einsteiger_in (47 Punkte)
Mag sein, dass ich blind bin, hab aber ein solcher Code nicht gefunden. Ich hab mal nur mit TTotalBlockTime und mit $row gesucht.
Ein ähnlicher ist dieser:
echo '<tr><td style="width: 120px;"><strong>TotalBlockTime:</strong></td><td>'.$row["TotalBlockTime"]."</td></tr>";

Hat aber mit der zweiten Anfrage nichts zu tun.
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Stimmt. Aber du hast doch selbst deine Abfragen vor der Nase - geh doch mal alle Teile durch, bei denen du SEC_TO_TIME( ... ) entfernt hast. All diese Spaltennamen müssen doch auch im PHP-Code auftauchen und nicht nur im SQL-Befehl.
...