Ich habe Schwierigkeiten, eine elegante Lösung zum Sortieren der Ergebnisse einer MySQL-Abfrage basierend auf einer begrenzten Zeichenfolge zu finden. Ill erklären im Detail weiter untenSortierung der Ergebnisse einer MySQL-Abfrage
Ich erstelle eine Datenbank von Kontakten, in denen einzelne Benutzer Leute von einer Liste hinzufügen/entfernen können. Wenn der Benutzer einen neuen Kontakt hinzufügt ich anhängen den zusätzlichen Kontakt-ID an einen getrennten String und speichern, die Daten in einer Datenbankspalte mit dem Benutzer zugeordnet ist (benannt Kontakte):
$userID = ?? //YOUR ID
$contactID = ?? //WHATEVER THE ADDED USER ID IS
$confirm = 0 //has the user been confirmed
$sql = "SELECT contacts FROM user WHERE id = '$userID'";
$query = mysql_query($sql);
$row = mysql_fetch_array($query);
$contact = $row['contacts'];
$contact .= '|'.$contactID.':'.$confirm;
$update = mysql_query("UPDATE user SET contacts = '$contact' WHERE id = '$userID'");
//contact column data might be: |10:0|18:0|36:0|5:0
Wenn der Benutzer sucht ihre Kontakte, die ich das packen Daten aus der Spalte Kontakte, explodieren/spaltete die Zeichenfolge und geben die einzelnen Benutzer-Namen:
$userID = ?? //YOUR ID
$sql = "SELECT contacts FROM user WHERE id = '$userID'";
$query = mysql_query($sql);
$row = mysql_fetch_array($query);
$contacts = explode("|", $row['contacts']);
foreach($contacts as $item)
{
list($contactID,$confirm) = split(":", $item);
$sql = "SELECT name FROM ".user." WHERE id = '$contactID'";
$query = mysql_query($sql);
$row = mysql_fetch_array($query);
echo($row['name'].'<BR>');
}
in der Tat alle Namen dieser zurückkehrt, aber es gibt sie in der Reihenfolge der getrennten Zeichenfolge. Ich finde nicht, dass ich eine elegante Möglichkeit finde, alphabetisch nach Namen zu sortieren.
Sollte ich die Kontaktliste nicht in einer Zeichenfolge mit Trennzeichen speichern? Wie würdest du das lösen?
Sie sollten Ihre Kontakte in einer neuen Tabelle namens Kontakte speichern. Jede Zeile dieser Tabelle sollte die Benutzer-ID haben, also können Sie 'SELECT * FROM \' contacts \ 'WHERE \ 'user_id \' = verwenden; ' –
Die Datenbank normalisieren und die Sortierung sollte ziemlich einfach sein . – Zoredache
Diese Art von Problem ist genau deshalb, warum Sie Einträge in einer Datenbank nicht als kommagetrennte Zeichenfolge speichern sollten. normalisieren! normalisieren! normalisieren! –