Wie am besten nachhaltig nach Name sortieren?

Johnnii360

Erfahrenes Mitglied
Servus zusammen!

Ich bräuchte mal ein bisschen Denkhilfe von Euch - hab irgendwie gerade eine Blockade.

Erst mal zu den beiden Tabellen (nur relevante Felder):
Kunden: id, katid
Kundenkategorien: id, name

Im Moment mache ich es so, dass ich zuerst die Kategorie-IDs der Kundentabelle (katid) gruppiert in einer while-Schleife auslese. Dann erfasse ich dabei den Kundenkategorienamen (name) und lese anschließend wieder in einer while-Schleife die zu der jeweiligen Kategorie-ID (katid) zugehörigen Einträge aus.

Hier mal der Code zur besseren Verständlichkeit:
PHP:
$KundenSQL = "SELECT * FROM ".$sql_kunden." WHERE kdnr='".$CustomerID."' GROUP BY katid";
$KategorieDesKunden = mysql_query($KundenSQL) or print(mysql_error());
if(mysql_num_rows($KategorieDesKunden) > 0)
{
    while($KategorieIDdesKunden = mysql_fetch_assoc($KategorieDesKunden))
    {
        // Erfassen des Kategorienamens
        $Kategorien = mysql_query("SELECT * FROM ".$sql_kunden_kategorien." WHERE id='".$KategorieIDdesKunden['katid']."'") or print(mysql_error());
        $Kategorie = mysql_fetch_assoc($Kategorien);

        echo'<font>'.$Kategorie['name'].'</font>';
        echo'<ul class="UIsList">';

        /* Auflisten der Datensätze
         * */
        $Kunden = mysql_query("SELECT * FROM ".$sql_kunden." WHERE katid='".$Kategorie['id']."'") or print(mysql_error());
        while($Kunde = mysql_fetch_assoc($Kunden))
        {
            [...]
        }

        echo'</ul>';
    }
}
else
{
    echo'<li><span style="font-style: italic; color: #808080; text-shadow: 1px 1px 1px #FFFFFF;">keine web-ui-links vorhanden</span></li>';
}

Jetzt werden zwar alle Kategorien und Einträge zu den Kategorien angezeigt. Allerdings sind diese nun nicht sortiert und möchte die Kategorien also die Kategorienamen nach A-Z sortieren.

Ich habe mir gedacht, dass ich erst eine der beiden Tabellen auslese und dabei mit array_push() mit anschließender Neuauflistung mittels foreach() arbeite. Allerdings komm ich gerade nicht dahinter wie ich das am besten bewerkstelligen kann.

Würde mich über Eure Hilfen bzw. Denkanstöße freuen. :)

Vielen Dank schon mal im Voraus!
 
Hi

Keine direkte Antwort, aber ein paar Gründe, warum du diesen Code dringed neu schreiben/durchdenken solltest:

a) mysql_query. Seit 2004 gibt was Besseres, und dass mysql_query irgendwann komplett verschwindet steht seit
2009 fest. Warum nicht gleich so schreiben, dass es auch dauerhaft funktioniert? Siehe MysqlI oder PDO.

b) SQL-Abfragen in Schleifen ind eine total unnötige Verlangsamung. Habs zwar noch nicht so genau angeschaut,
dass ich die fertigen Abfragen hinschreiben könnte, aber 1 oder 2 Abfragen gesamt reichen ziemlich sicher.

c) Keine Fehlerkontrolle bei den ganzen Funktionen.
 
Zuletzt bearbeitet:
Ich versteh auch nicht, was du hast und was du willst.
Hast du einen Kunden gegeben und willst die Kategorie dazu? Oder hast du eine Kategorie gegeben und willst die Kunden dazu?
 
Hi

Keine direkte Antwort, aber ein paar Gründe, warum du diesen Code dringeneu schreiben/durchdenken solltest:

a) mysql_query. Seit 2004 gibt was Besseres, und das mysql_query irgendwann komplett verchwindet steht seit
2009 fest. Warum nicht gleich so schreiben, dass es auch auerhaft funktioniert? Siehe MysqlI oder PDO.
Ich scripte hier für einen älteren nicht von mir stammenden, bestehenden Code. Mir sind Deine Tipps durchaus bekannt. Trotzdem danke.

Ich versteh auch nicht, was du hast und was du willst.
Hast du einen Kunden gegeben und willst die Kategorie dazu? Oder hast du eine Kategorie gegeben und willst die Kunden dazu?
Eigentlich hab's ich oben schon detailliert genug beschrieben. ;) Ich habe Kunden, denen ich eine Kategorie zuweise. Allerdings ist beides in getrennten Tabellen. Die Kategorien sollen jedoch bei der Ausgabe Alphabetisch geordnet werden. Allerdings wäre es unsinnig für jeden Kunden alle Kategorien auslesen zu lassen, wenn er nicht dieser Kategorie zugeordnet ist.
 
Hi,

ich würde anstatt der verschachtelten Schleife einen JOIN mit ORDER BY verwenden.

Grüße,
BK
Joa sieht vielversprechend aus. Hab mir das gerade mal im Manual angeschaut, aber so richtig schlau werde ich da nicht draus. Hast Du evtl. ein kleines Code-Beispiel anhand meiner Daten für mich? :)

Edit:
SQL:
SELECT t1.name, t2.salary FROM employee AS t1, info AS t2
WHERE t1.name = t2.name;
Glaube dass das der richtige Ansatz ist. Allerdings kann ich nicht viel damit anfangen.

Edit 2: Ach ja, bitte nicht vergessen, dass die Kategorie an sich habe und dann drunter die Kunden kommen.

Edit 3: Hab maln Testscript geschrieben. Will nicht. Kommt immer
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, null given in /var/www/intranet/htdocs/public/testgelaende.php on line 9
PHP:
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);

include("include/config.inc.php");

$Eintreage = mysql_query("SELECT ".$teamwork_kunden_uis_kategorien.".*,".$teamwork_kunden_uis.".* FROM ".$teamwork_kunden_uis_kategorien.", ".$teamwork_kunden_uis." WHERE ".$teamwork_kunden_uis.".katid = ".$teamwork_kunden_uis_kategorien.".id ORDER BY ".$teamwork_kunden_uis_kategorien.".name") or die(mysql_error());

while($Eintrag = mysql_fetch_assoc($Eintreage[$teamwork_kunden_uis_kategorien]))
{
    echo'<b>'.$Eintrag['name'].'</b><br>';

    while($Eintrag2 = mysql_fetch_assoc($Eintreage[$teamwork_kunden_uis]))
    {
        echo'- '.$Eintrag2['servername'].'<br>';
    }
}
?>
 
Zuletzt bearbeitet:
Hast du dir die fertige Abfrage, wie sie im Script zusammengesetzt wird, einmal ausgeben lassen?
Vermutlich ist da ein Fehler drin, reingebracht durch unpassende Variablenwerte etc.
 
Ich meine
PHP:
echo "SELECT ".$teamwork_kunden_uis_kategorien.".*,".$teamwork_kunden_uis.".* FROM ".$teamwork_kunden_uis_kategorien.", ".$teamwork_kunden_uis." WHERE ".$teamwork_kunden_uis.".katid = ".$teamwork_kunden_uis_kategorien.".id ORDER BY ".$teamwork_kunden_uis_kategorien.".name";
Also nicht das Ergebnis der ausgeführten Anweisung, sondern die Anweisung selbst.
 
Achso! Ne, aber jetzt. :)

SELECT teamwork_kunden_uis_kategorien.*,teamwork_kunden_uis.* FROM teamwork_kunden_uis_kategorien, teamwork_kunden_uis WHERE teamwork_kunden_uis_kategorien.id = teamwork_kunden_uis.katid ORDER BY teamwork_kunden_uis_kategorien.name

Scheint aber alles okay zu sein. Kann höchstens die Query auch nochmal recrusiv ausgeben lassen.

Edit: Also ein mysql_num_rows() gibt 6 Einträge. Ich glaub das der Fehler eher bei den while-Schleifen und den Variablen im mysql_fetch_assoc().
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück