2016-10-14 2 views
0

Mit einer einfachen mysqli_query retreive ich alle Aufgaben aus meiner Datenbank. Jede einzelne Aufgabe hat eine Frist. Ich möchte berechnen, wie viele Tage für jede einzelne Aufgabe übrig sind. Wenn das erledigt ist, möchte ich alle Aufgaben basierend auf den verbleibenden Tagen bestellen. Wie kann ich das erreichen? Ich habe dieses einfache Stück Code bekommen alle Aufgaben:Wie bestelle ich ein MySQL nach einer Zeile?

$sql = mysqli_query($mysqli, "SELECT * FROM tasks"); 
while($rows=mysqli_fetch_array($sql,MYSQLI_ASSOC)){ 
    $deadline = $rows['deadline']; 
    $today = strtotime('now'); 
    $date_diff = $deadline - $today; 

    echo $date_diff; 
} 

Aber wie kann ich sie von $ date_diff bestellen?

+0

't SELECT. *, DATEDIFF (Tag, t.deadline, CURDATE()) AS DiffDate VON Aufgaben t ORDER BY DATEDIFF (Tag, 'Frist', CURDATE())' – Blinkydamo

+0

Sie sortieren Ergebnisse in SQL mit 'ORDER BY'. Aber wollen Sie eigentlich * alle * Aufgaben in Ihrer Tabelle anzeigen, sogar vor Jahren erfüllte Aufgaben? Vielleicht möchten Sie eine 'WHERE'-Klausel hinzufügen. Es sollte ein Statusfeld in der Tabelle vorhanden sein, damit Sie abgeschlossene Aufgaben ausschließen können (da Aufgaben, die ihre Frist nicht bestanden haben, nicht unbedingt abgeschlossen sind). –

Antwort

-1

Sie können diese Minusoperation in mysql und ORDER BY das gleiche durchführen. Hier ist, wie Sie es tun,

$sql = mysqli_query($mysqli, "SELECT * FROM tasks ORDER BY (deadline-UNIX_TIMESTAMP())") DESC; 

Wir UNIX_TIMESTAMP() verwendet haben, den aktuellen Zeitstempel zu erhalten und es nach Ablauf der Frist abgezogen.

Am Ende der Abfrage haben wir das Schlüsselwort DESC verwendet, das das Ergebnis nach Tagen in absteigender Reihenfolge sortiert.

1

Sie können das einfach in Ihrer SQL-Abfrage tun.

$sql = mysqli_query($mysqli, "SELECT TIMEDIFF(deadline, CURRENT_TIME) as date_diff FROM tasks ORDER BY TIMEDIFF(deadline, CURRENT_TIME)"); 
+0

Warum mit der Berechnung in der Art beschäftigen? Es gibt keinen Unterschied zwischen (ORDER BY x) und (ORDER BY x - constant), außer dass der letztere mehr Zeit benötigt. – Erik

+0

Ja, das ist tatsächlich wahr, Sie können "ORDER BY Deadline" verwenden, und das wird das gleiche Ergebnis ein bisschen schneller zurückgeben. Danke für das Erwähnen. – Okba

Verwandte Themen