Ankündigung

Einklappen
Keine Ankündigung bisher.

Mehrere Sortierungen in einer Abfrage

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Mehrere Sortierungen in einer Abfrage

    Hallo Leute,

    ich habe eine Abfrage und diese möchte ich nach bestimmten Parameter sortieren. Für die Abfrage benutze ich ein PDO-Modul in einem CMS (MODx) mit folgender Schreibweise:

    PHP-Code:
    [[!pdoPage?
    &
    where=`{"stadtteil:==":"Mitte", "AND:template:==":6"}`
    &
    sortby=`{"entfernung":"ASC"}`
    ]] 
    In dem Fall werden alle Einträge, die im Stadtteile "Mitte" liegen und das Template 6 haben angezeigt und nach dem Wert der Entfernung sortiert.

    Der nächster Aufruf soll aber so sein:
    - Alle Einträge mit dem Template 6
    - Zuerst die Einträge mit dem Stadtteil "Mitte" sortiert nach der "Entfernung"
    - Danach alle andere Einträge sortiert nach "Entfernung"

    Ich kenne mich mit MySQL nicht besonders gut aus, deswegen die Frage: kann jemand von euch die typische Schreibweise für das ORDER BY (&sortby) für so einen Fall verraten? Ist sowas überhaupt in einem Aufruf möglich?

    Ich habe mit folgender Abfrage angefangen, die aber mit Sicherheit einen Logik-Fehler hat und so nicht funktioniert:


    PHP-Code:
    [[!pdoPage?
    &
    where=`{"template:==":6"}`
    &
    sortby=`{"stadtteil":"Mitte","entfernung":"ASC"}`
    ]] 
    Also grob gefaßt, ist die Frage ob man:
    primär nach ORDER BY 'stadtteil'
    und sekundär nach ORDER BY 'entfernung':ASC

    Sortieren kann?


  • #2
    In SQL geht das, ob das mit deinem Modul geht, weiß ich nicht.

    Code:
    ORDER BY stadtteil = 'Mitte' DESC, entfernung ASC

    Kommentar


    • #3
      Zitat von Dormilich Beitrag anzeigen
      In SQL geht das, ob das mit deinem Modul geht, weiß ich nicht.

      Code:
      ORDER BY stadtteil = 'Mitte' DESC, entfernung ASC
      Danke schonmal dafür! Wenn ich z.B.
      PHP-Code:
      &sortby=`{"stadtteil":"ASC","entfernung":"ASC"}
      eingebe, dann sortiert er so, wie es bei ORDER BY üblich ist, zuerst nach dem Stadtteil, dann nach der Entfernung. Ich muss nur herausfinden wie man ein = 'Mitte' einbindet. Hat an dem Punkte aber natürlich nichts mehr direkt mit SQL zu tun.

      Kommentar


      • #4
        PHP-Code:
        &sortby=`{"stadtteil='Mitte'":"ASC","entfernung":"ASC"}
        einfach ausprobieren.

        Kommentar


        • #5
          Zitat von protestix Beitrag anzeigen
          PHP-Code:
          &sortby=`{"stadtteil='Mitte'":"ASC","entfernung":"ASC"}
          einfach ausprobieren.
          Ich habs eingesetzt und pdoPage gibt beim Aufruf auch keinen Fehler an (was er bei einem Syntax-Error sofort tun würde). Allerdings sortiert er die Angaben einfach nach entfernung ohne den Stadtteil zu berücksichtigen.

          Soweit mir bekannt ist, sind die Angaben in einem JSON Format, falls das eine nützliche Information ist..

          Kommentar


          • #6
            So sieht die Lösung aus:

            PHP-Code:
            &sortby=`{"FIELD(stadtteil, "Mitte")":"DESC", "entfernung":"ASC"}

            Kommentar


            • #7
              Glücklicherweise hast du es noch vor Weihnachten geschafft
              Sehr gut.

              Kommentar


              • #8
                Zitat von JoePetts Beitrag anzeigen
                So sieht die Lösung aus:

                PHP-Code:
                &sortby=`{"FIELD(stadtteil, "Mitte")":"DESC", "entfernung":"ASC"}
                Der korrekte SQL-Code lautet
                Code:
                SELECT Tabelle1.ID, Tabelle1.Bezirk, Tabelle1.Entfernung
                FROM Tabelle1
                ORDER BY If(Bezirk='Mitte',True,False) DESC, Tabelle1.Entfernung;
                Wobei man bei manchen DBMS aufpassen muß, weil boolsche Werte tw. so sortiert werden, daß true an 1. Stelle kommt, dann also bei den Bezirken ASC statt DESC.

                Kommentar


                • #9
                  Der korrekte SQL-Code lautet
                  Info: Haben auch sowas als Beispiel in der Wissenssammlung: https://php-de.github.io/jumpto/sql-...ort/#bedingung
                  Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                  PHP.de Wissenssammlung | Kein Support per PN

                  Kommentar


                  • #10
                    ... und was nutzt ihm das, wenn er mit PdoPage arbeitet?

                    Kommentar


                    • #11
                      Weil es den Anschein hat, dass PdoPage als Key eine SQL-Expression benutzt.

                      Kommentar


                      • #12
                        Zitat von hausl Beitrag anzeigen

                        Info: Haben auch sowas als Beispiel in der Wissenssammlung: https://php-de.github.io/jumpto/sql-...ort/#bedingung
                        Und demzufolge funktioniert auch
                        Code:
                        SELECT Tabelle1.ID, Tabelle1.Bezirk, Tabelle1.Entfernung
                        FROM Tabelle1
                        ORDER BY Bezirk='Mitte' DESC, Tabelle1.Entfernung;
                        (tut es, getestet) und #8 war überflüssig, denn in #2 von Dormilich stand es schon drin.

                        Entscheidend ist, daß ein Ausdruck erzeugt wird, der bool'sche Werte annimmt. Nichts anderes bewirkt
                        Code:
                        FIELD(Bezirk, "Mitte")
                        , PdoPage erzeugt damit den Ausdruck
                        Code:
                        Bezirk='Mitte'
                        Zu wissen, wie die korrekte SQL-Syntax lautet, ist immer wichtig, denn man testet eine Abfrage, bevor man sie mit Php - ob mit mysqli, PDO, PdoPage oder was auch immer - implementiert, auf der Datenbank auf korrektes Funktionieren. In PDO gibt es glaube ich auch irgendwie die Möglichkeit, sich den SQL-Code, den man sich mit Parametern, ? oder sonstwie "zusammengeschnippelt" hat, anzuschauen. scheint so (also korrekt) zu arbeiten, sonst hätte er nicht danach gefragt.

                        Kommentar

                        Lädt...
                        X