Ankündigung

Einklappen
Keine Ankündigung bisher.

mysql_query Ausgabe nach Wörtern sortieren.

Einklappen

Neue Werbung 2019

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

  • mysql_query Ausgabe nach Wörtern sortieren.

    Guten Tag,
    ich habe in der Spalte orders_status die sich in der Tabelle orders befindet immer drei Werte.
    Diese heißen active, progress und inactive.
    Jetzt ist meine Frage wie kann ich die mysql_query(...) Ausgabe so sortieren, dass erst progress, dann active und dann inactive angezeigt werden.

  • #2
    Überhaupt nicht - zumindest nicht ohne Weiteres, Mysql unterstützt alphabetische Sortierung aufsteigend oder absteigend. Also entweder
    Code:
    active, inactive, progress
    oder
    Code:
    progress, inactive, active
    Welchen Datentyp hat deine Spalte denn? Enum-Spalten werden zum Beispiel in der Reihe ihrer Definition sortiert. Du könntest das Feld also als ENUM('progress','active','inactive') definieren.

    Natürlich gibt es noch andere Wege mit SWITCH/CASE oder IF/ELSE in deiner Query.

    Kommentar


    • #3
      die möglichkeit, ein order by kriterium in einem select zu definieren, wäre mir neu. Gibts sowas?

      du könntest eine zweite Tabelle sorter machen mit den sortier-kriterien:
      id word
      1 progress
      2 active
      3 inactive

      und dann machst du einen join:

      PHP-Code:
      SELECT a.orders_status FROM orders a LEFT JOIN  sorter b ON a.orders_status b.word ORDER BY b.id ASC 
      oder du verbindest alles per UNION

      PHP-Code:
      (SELECT orders_status FROM orders WHERE orders_status 'progress')
      UNION
      (SELECT orders_status FROM orders WHERE orders_status 'active')
      UNION

      etc 

      Kommentar


      • #4
        Das klappt irgendwie nicht

        Kommentar


        • #5
          bischen wenig für ne fehlerbeschreibung

          Kommentar


          • #6
            Zitat von Harry_X Beitrag anzeigen
            die möglichkeit, ein order by kriterium in einem select zu definieren, wäre mir neu. Gibts sowas?
            Ja. Schon recht lange.

            Code:
            test=*# select * from projectx;
             orders_status
            ---------------
             active
             progress
             inactive
            (3 rows)
            
            Time: 0,147 ms
            test=*# select * from projectx order by case when orders_status = 'progress' then 1 end, case when orders_status = 'active' then 2 end, case when orders_status = 'inactive' then 3 end;
             orders_status
            ---------------
             progress
             active
             inactive
            (3 rows)
            Andreas

            Kommentar


            • #7
              haha super

              Kommentar


              • #8
                nehm doch Zahlen für den Statu. Dann istes einfach.

                Kommentar


                • #9
                  Ich hätte die 3 Werte (active, inactive, progress) in einer separaten Tabelle abgelegt und in der Tabelle "orders" nur die Werte-Id. In der Wertetabelle kannst Du ohne weiteres ein Feld "reihenfolge" anlegen, mit dem Du eben die Sotierung steuerst.

                  Kommentar


                  • #10
                    es gäbe auch noch die möglichkeit die case whens als eigene funktion zu deklarieren...

                    Kommentar

                    Lädt...
                    X