2016-04-07 11 views
0

Im Folgenden habe ich meinen Code auf eine vereinfachte Version reduziert. Ich Speicherung SQL SELECT Ergebnisse für:Sortieren einer NON-SQL-Tabellenspalte in einer Tabelle mit Daten aus der SQL-Abfrage

  • Nachname (DLName)
  • Kategorie (Kategorie)
  • Datum dieser Daten in die Datenbank (DATE_ADDED)
  • Kunden Name (Client)
hinzugefügt wurde

Ich habe ein zusätzliches Feld außerhalb der SQL SELECT namens 'days_on_list' angefügt. In diesem Feld wird die Anzahl der Tage seit dem Hinzufügen der Daten zur Datenbank angezeigt, sodass die Tabelle 5 Spalten mit Benutzerdaten ausgibt. ALLE 5 SPALTEN SIND SORTIERBAR.

Ich benutze serverseitige JSON und war erfolgreich in der Lage, dies auf die Tabelle anzuzeigen und Sortierung auf 4 der 5 Spalten durchzuführen. Das Problem ist, dass ich das 'days_on_list'-Feld nicht sortieren kann, da die PHP-Datei, die den SQL-Code enthält, mir nur erlaubt, die 4 Felder aus der ausgewählten Abfrage zu sortieren. Gibt es eine Möglichkeit, die Spalte 'days_on_list' in der Tabelle sortierbar zu machen? Ich weiß, dass ich dieses Feld zur sql Tabelle hinzufügen kann, aber ich würde ein geplantes Ereignis auf dem Bediener laufen lassen müssen, um dieses täglich zu aktualisieren (mit dem ich mich nicht wohl fühle).

Gibt es eine andere Möglichkeit, diese Art der flexiblen Sortierung zu ermöglichen?

Sorry über den Titel der Frage (kann verwirrend sein), hatte ich Probleme, dies in eine Frage zu stellen.

/*SQL CODE ABOVE HERE STORES SELECT RETURNS IN $result*/ 
 
$cart = array(); 
 
$i = 0; //index the entries 
 
// get variables from sql result. 
 
if ($num_rows > 0) { //if table is populated... 
 

 
    while ($row = mysqli_fetch_assoc($result)) { 
 

 
    //calculate days on list by getting the number of days from 
 
    //the 'date_added' to today 
 
    $date1 = date_create($row['date_added']); 
 
    $today = date_create(date("d-m-Y")); 
 
    $interval = date_diff($date1, $today); 
 
    $doty = $interval - > format("%a"); 
 

 
    $cart[$i] = array(
 
     "dlname" => htmlspecialchars($row['dlname']), 
 
     "category" => htmlspecialchars($row['category']), 
 
     "date_added" => htmlspecialchars($row['date_added']), 
 
     "client" => htmlspecialchars($row['client']), 
 
     "days_on_list" => $doty, //date_added to now 
 
    ); 
 
    $i = $i + 1; //add next row 
 
    } 
 

 
    //encoding the PHP array 
 
    $json_server_pagination_data = array(
 
    "total" => intval($num_rows), 
 
    "rows" => $cart, //array data 
 
); 
 
} 
 

 
echo json_encode($json_server_pagination_data);

+0

Wenn ich die days_on_list -Spalte sortiere, wird eine leere Tabelle zurückgegeben, und die Daten werden zurückgegeben, wenn ich eine der anderen Spalten sortiere. Ich dachte, solange die Tabelle Zugriff auf alle Daten innerhalb der JSON-Ausgabe hat, würde sich die Sortierung nach days_on_list genauso verhalten wie die anderen Spalten. –

+0

Ich bin in einer seltsamen Situation, wo für meine Sortierung für die 4 Spalten arbeiten (alle außer days_on_list), ich eine ORDER BY [Spalte hier] innerhalb der SQL-Abfrage hinzufügen. Aber da die days_on_list außerhalb der Abfrage existiert, bekomme ich eine leere Tabelle –

+0

WOW! Es funktionierte! Vielen Dank, mein Freund! –

Antwort

0

Da days_on_list einfach berechnet wird durch date_added zum aktuellen Datum zu vergleichen, sollte genau den umgekehrten Effekt wie das Sortieren von date_added hat durch days_on_list Sortierung.

Mit anderen Worten, Sie müssen nicht wirklich nach days_on_list sortieren. Wenn der Benutzer days_on_list als Sortierspalte auswählt, verwenden Sie einfach ORDER BY date_added (in der entgegengesetzten Richtung ASC/DESC).

Verwandte Themen