Zum Inhalt springen

Mehrfachsortierung in mySQL

Erstellt am 9. Oktober 2007 · 2 Antworten · letzte Antwort am 9. Oktober 2007

Tags: Frage

Unbekannter Benutzer ·

Hallo Forum,

vor einiger Zeit habe ich eine ältere Version von tt_products so angepasst, dass es möglich war, einzelnen Produkten mehrfach Kategorien zuzuweisen und auch pro Kategorie eine Sortierung vorzunehmen. Dazu habe ich ein serialisiertes PHP-Array in einem Datenbankfeld abgelegt.

Leider hat diese Methode auch einen kleinen Hacken, denn nun muss ich zuerst immer alle Datensätze einlesen, dass "Sortierungs-Array" auswerten und nach diesem dann die Sortierung in PHP vornehmen ...

Da ich für ein ähnliches, bestehendes Projekt nun auch so eine Mehrfachsortierung benötige, suche ich nach Mitteln und Wegen, die Sortierung wieder in mySQL zurückzuverlagern!

Daher meine Frage:
Gibt es Möglichkeiten innerhalb von mySQL (4.1) in einem Feld Mehrfachwerte zu hinterlegen und diese zur Sortierung zu nutzen???

Wäre euch sehr dankbar für Antworten! 🙂

fuzz · · Beste Antwort

hmm... also wenn du ein array hast indem steht nach welchen spalten in welcher reihenfolge sortiert werden soll. kannste dir doch daraus den query machen oder?

// Dein Array aus der DB
$sortAr = array(
                 array("field" => "colA", "order" => "ASC"),
                 array("field" => "colB", "order" => "DESC")
                );

// Der SQL Query für die Abrage
$query = "SELECT * FROM tabelle ORDER BY ";

// Anhängen der Sortierung
for ( $i = 0; $i < sizeof($sortAr); $i++ ) {
    $query .= $sortAr[$i]["field"]." ".$sortAr[$i]["order"];

    if ( ($i > 0) && ($i < sizeof($sortAr)-1) ) {
        $query .= ", ";
    }
}

// Ergebnis:
// $query = "SELECT * FROM tabelle ORDER BY colA ASC, colB DESC";

...so in etwa... passt das wie du es brauchst?

gruß fu

Unbekannter Benutzer ·

Hi fuzz,

leider ist es etwas anders, stell dir ein Artikel vor, der zwei Kategorien angehört:

Art. 001, Kategorie 1, Sortierung 3. Position
Art. 001, Kategorie 4, Sortierung 5. Position

Heraus kommt folgendes Array, welches im DB-Feld serialisiert abgelegt wird:

$sorting = array(1 => 3, 4 => 5);

Sprich: Der Key ist die Kategorie-Id, der Wert ist die Sortierung innerhalb des Kat.

Ein ORDER BY kann man nun ja nicht mehr anweden, also müssen alle Datensätze der gewünschten Kategorie zuerst ausgelesen, deren Sortierungs-Array unserialisiert und anhand dessen dann die eigentliche Sortierung per PHP durchführen werden.