2012-03-29 1 views
1

Gibt es in php eine Abfrage, mit der Sie alle Daten zwischen zwei Daten einfügen können?Eingabe eines Startdatums und eines Enddatums und Einfügen der Daten dazwischen in db

Zum Beispiel eingeben 20.03.2012 und 20.03.2013 und mysql mit allen Daten zwischen den beiden füllen?

Ich machte ein Ticketing-System für eine Fluggesellschaft und sie haben 13 Flüge täglich von mehr als 20 Standorten und manuell einzufügen wurde mühsam.

Ich wollte die Daten sowie die Werte für jeden Tag

EG einzufügen.

FROM    TO    Date_From    Date_To 
    Dar Es Salaam  Zanzibar   03/20/2012    03/21/2012 
    Dar Es Salaam  Zanzibar   03/21/2012    03/22/2012 

Hinweis

Ich möchte diese Liste nicht auf GENE (die Fragen, die ich nur recherchiert habe geantwortet, wie eine Liste zu erzeugen) ich eine MySQL-DB

Jede Hilfe zu bevölkern wollen würde sehr geschätzt

+0

fragte ich eine Frage, die so immer dumm niemand kümmert sich darum zu antworten, oder habe ich die Stackoverflow-Community O_o stumpf gemacht. –

Antwort

2

könnten Sie diese Funktion verwenden, um eine Reihe von Terminen

function dateRange($first, $last, $step = '+1 day', $format = 'd/m/Y') { 

    $dates = array(); 
    $current = strtotime($first); 
    $last = strtotime($last); 

    while($current <= $last) { 

     $dates[] = date($format, $current); 
     $current = strtotime($step, $current); 
    } 

    return $dates; 
} 

$dateRange = dateRange("03/20/2012", "03/20/2013); 

zu erzeugen und iterato dann über das Array die Daten einzufügen

$stmt = $dbh->prepare("INSERT INTO table (from, to, date_from, date_to) VALUES (:from, :to, :datefrom, :dateto)"); 
$stmt->bindParam(':from', "Dar Es Salaam"); 
$stmt->bindParam(':to', "zanzibar"); 
$stmt->bindParam(':from', $datefrom); 
$stmt->bindParam(':to', $dateto); 
for ($i = 0; $i < count($dateRange); $i++){ 
    $datefrom = strototime($dateRange[$i]); 
    $dateto = strototime($dateRange[$i+1]); 
    $stmt->execute(); 
} 
+0

Dies könnte tatsächlich so aussehen, als würde es funktionieren. Ich teste es aus und komme zurück zu dir –

+0

Ein paar Knicke, aber es funktionierte wie ein Zauber. Vielen Dank –

0

Die einfachste Möglichkeit, eine DB aufzufüllen, ist eine Liste von SQL-Einfügeabfragen zu generieren.

Wenn Sie also eine Liste von Abfragen erzeugen können, die so etwas wie insert into table (... , date_from, date_to, ...) values (..., val1, val2, ...) machen, können Sie diese Abfragen ausführen und die Tabelle POPULIEREN.

+0

Theyre nicht in der DB noch. Anstatt sie manuell einzeln mit der Klausel insert in table einzufügen, wollte ich wissen, ob es eine Abfrage gab, die die db mit den Daten zwischen den beiden Daten bevölkert. –

0
$int_date_from = strtotime($str_date_from); // Will be used often 
$int_days = (strtotime($str_date_to) - $int_date_from); // Calculate difference in seconds 
$int_days /= floor(60 * 60 * 24); // Seconds to days 

$arr_values = array(); 
for($i = 0; $i < $int_days; $i++) { 
    $str_new_date_from = date('m/d/Y', strtotime("+{$i} Days", $int_date_from)); 
    $str_new_date_to = date('m/d/Y', strtotime('+'.($i + 1).' Days', $int_date_from)); 

    $arr_values[] = "('{$str_from}', '{$str_to}', '{$str_new_date_from}', '{$str_date_to}')"; 
} 

$str_values = implode(', ', $arr_values); 

mysql_query(" 
INSERT INTO table 
VALUES {$str_values} 
"); 
Verwandte Themen