Announcement

Collapse
No announcement yet.

Schwierige SQL Abfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • #16
    Hi,

    so langsam nähern wir uns dem an, was bei rauskommen soll. Hier ein relativ leicht zu verstehender Quelltext mit vielen Erklärungen. Du sollst ja schließlich etwas dabei lernen:

    PHP Code:
    <?php
    /**
     * Gibt die Anzahl der Minuten einer Uhrzeit seit Mitternacht zurück.
     * @param string $time Die Uhrzeit in dem Format 'hh:mm'
     * @return int Die Anzahl der Minunten seit Mitternacht
     */
    function getTime($time) {
        
    $time explode(':',$time);
        return (int)
    $time[1] + 60 * (int)$time[0];   
    }

    // Muss nach der Uhrzeit sortiert sein
    $DB = array(
            array(
    'id'=>10452'status'=>1'datum'=>'17.07.2009''uhrzeit'=>'08:02''km'=>735'Adresse'=>'adresse1'),
            array(
    'id'=>10452'status'=>1'datum'=>'17.07.2009''uhrzeit'=>'08:12''km'=>741'Adresse'=>'adresse2'),
            array(
    'id'=>10452'status'=>1'datum'=>'17.07.2009''uhrzeit'=>'08:24''km'=>749'Adresse'=>'adresse3'),
            array(
    'id'=>10452'status'=>0'datum'=>'17.07.2009''uhrzeit'=>'08:27''km'=>749'Adresse'=>'adresse4'),
            array(
    'id'=>10452'status'=>0'datum'=>'17.07.2009''uhrzeit'=>'08:31''km'=>791'Adresse'=>'adresse5'),
            array(
    'id'=>10452'status'=>1'datum'=>'17.07.2009''uhrzeit'=>'08:38''km'=>798'Adresse'=>'adresse6'),
            array(
    'id'=>10452'status'=>1'datum'=>'17.07.2009''uhrzeit'=>'08:46''km'=>842'Adresse'=>'adresse7'));

    /////////////////////////////////////////////////////////////////////
    // Die Startzeiten ermitteln und überflüssige Einträge ignorieren. //
    /////////////////////////////////////////////////////////////////////
            
    $Rows = Array();
    // Auf einen Status setzen, den es nicht gibt, damit der erste Eintrag auf jeden Fall beachtet wird.
    $CurrenStatus = -1;

    for(
    $i=0$i<count($DB); $i++) {
        
    // Prüfen, ob sich der Status geändert hat. Ansonsten brauchen wir den Eintrag nicht zu beachten.
        
    if($CurrenStatus != $DB[$i]['status']) {
            
    // Die Änderung des Status's speichern
            
    $CurrenStatus $DB[$i]['status'];
            
    // Den Eintrag zur Liste hinzufügen
            
    $Rows[]['start'] = $DB[$i];
        }
    };

    //////////////////////////////////////////
    // So jetzte fehlen noch die Endzeiten. //
    //////////////////////////////////////////

    $RowLength count($Rows);

    // Es wird jede Reihe durchrgegangen
    for($i=1$i<$RowLength$i++) {
        
    // Die Startseite der Reihe $i ist gleich die Endzeit der Reihe davor ($i-1)
        
    $Rows[$i-1]['end'] = $Rows[$i]['start'];
    };

    // Für die letzte Reihe setzte ich die Start- und die Endzeit gleich
    $Rows[$RowLength-1]['end'] = $Rows[$RowLength-1]['start'];



    /////////////////
    // Die Ausgabe //
    /////////////////

         
    ?>
    <table>
    <tr>
    <th>
    <th>Startzeit
    <th>Adresse-abfahrt
    <th>Ankunftzeit
    <th>Adresse-ankunft
    <th>Fahrzeit
    <th>km
    <?php foreach($Rows as $Entry): ?>
        <tr>
        <td><?=== $Entry['start']['status'] ? 'Fahrzeit' 'Standzeit')?>
        <td><?=$Entry['start']['uhrzeit']?>
        <td><?=$Entry['start']['Adresse']?>
        <td><?=$Entry['end']['uhrzeit']?>
        <td><?=$Entry['end']['Adresse']?>
        <td><?=getTime($Entry['end']['uhrzeit'])-getTime($Entry['start']['uhrzeit'])?>
        <td><?=$Entry['end']['km']-$Entry['start']['km']?>
    <?php 
    endforeach; ?>
    </table>
    Es sind nicht mal 11 Zeilen
    "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

    Viele Grüße Novi

    Comment

    Working...
    X