0

select ... order by ... desc - wie geht das?

Hallo liebe Ninoxler!

Wie kann ich die Sortierung in einem Ninox SELECT "herumdrehen" - so wie in SQL:

select ... order by ... desc

17 Antworten

null
    • Rafael_Sanchis
    • vor 1 Monat
    • Gemeldet - anzeigen

    Select table order by  -field

    • Pushing the Boundaries of Ninox
    • Gotje_Ing
    • vor 1 Monat
    • Gemeldet - anzeigen

    Moin,

    ein Umdrehen mit -field können wir nicht empfehlen, da es nicht in jedem Ausführungskontext sauber funktioniert und manche Felder nicht mit einem - gedreht werden können. Sauber ist diese Variante:

    let mySelect := (select Tabelle where ... order by XYZ);
    mySelect := for i in range(cnt(mySelect), 0, -1) do
                        item(mySelect, i - 1)
                    end

    Dieser Code funktioniert für alle Feldtypen, ist um ein vielfaches schneller als die reverseAscii Funktion hier z.B. https://forum.ninox.com/t/p8hrzqj?r=h7hraxw und funktioniert in jedem Ausführungskontext korrekt.

    Grüße Philipp

      • qd_team
      • vor 1 Monat
      • Gemeldet - anzeigen

       Hallo Philipp! Vielen Dank für den Tipp! 🙏 Hat super funktioniert.

      • qd_team
      • vor 1 Monat
      • Gemeldet - anzeigen

      ich habe das mal als Feature Request formuliert: https://forum.ninox.de/t/x2yppv4

      • mirko3
      • vor 1 Monat
      • Gemeldet - anzeigen

       schöne Lösung. M.E. kann die range() ohne step geschrieben werden und damit entfällt die Subtraktion im item(). Ist nur Makulatur, deine Idee ist Klasse. Mirko

      let tab := ((select Tabelle) order by Text);
      for i in range(cnt(tab), -1) do
          item(tab, i).Text
      end
      • Pushing the Boundaries of Ninox
      • Gotje_Ing
      • vor 1 Monat
      • Gemeldet - anzeigen

       Ich glaube das hatte ich drin, damit ich in JSONs das syntaktisch identisch anwenden kann, der Test ist aber schon ein bisschen her. 
      Danke für die Kürzung.

      Grüße Philipp

    • + Maßanzug statt Massenware +
    • RonaldP
    • vor 1 Monat
    • Gemeldet - anzeigen

    Und wie sieht es mit rsort(select ...) aus?

      • Pushing the Boundaries of Ninox
      • Gotje_Ing
      • vor 1 Monat
      • Gemeldet - anzeigen

       
      Nein, rsort() sortiert nur alle Einträge rückwärts nach Nr. Nicht nach dem zuvor sortierten Wert!
       

      • + Maßanzug statt Massenware +
      • RonaldP
      • vor 1 Monat
      • Gemeldet - anzeigen

       ,

      ah, das kommt dann auf den Anwendungsfall an.
      Wenn ich wirklich nur Zahl haben und sortieren will, funktioniert es so schon:

      rsort((select Values).Zahl)
      
      • Pushing the Boundaries of Ninox
      • Gotje_Ing
      • vor 1 Monat
      • Gemeldet - anzeigen

       Du hast in diesem Fall den "Link" zwischen den Werten und den Records getrennt. 
      Ein rsort() in diesem Fall gibt dir lediglich ein Zahlarray sortiert nach Wert. Du kannst aber nicht mehr z.B. den zugehörigen Titel aus dem Record ziehen. Insofern ist es in fast allen Fällen, wo ein select ... desc in Verwendung kommen würde nicht relevant. 

      • + Maßanzug statt Massenware +
      • RonaldP
      • vor 1 Monat
      • Gemeldet - anzeigen

       ,
      jup, das meinte ich mit: "Wenn ich wirklich nur Zahl haben und sortieren will".

      Hab inzwischen den Feature-Request-Post dazu gesehen.
      Darin ist es noch expliziter beschrieben und meint es so wie du beschrieben hast...

    • Joerg.1
    • vor 3 Wochen
    • Gemeldet - anzeigen

    Moin.

    Ich bräuchte das für ein dynamisches Auswahlfeld. Wie mache ich das?

      • Pushing the Boundaries of Ninox
      • Gotje_Ing
      • vor 3 Wochen
      • Gemeldet - anzeigen

      Moin  ,

      gleiches Prinzip:

      let mySelect := (select Tabelle where ... order by XYZ);
      mySelect := for i in range(cnt(mySelect), 0, -1) do
                          item(mySelect, i - 1)
                      end;
      mySelect

      • Joerg.1
      • vor 3 Wochen
      • Gemeldet - anzeigen

       Danke Philipp, habe meine Brille gerade gerückt und nun sehe ich es auch. :-))

      • Rafael_Sanchis
      • vor 1 Stunde
      • Gemeldet - anzeigen

       

      Hi Götje how cant order by des in this example 

      (me order by stage = "Lead") and the orders

      let me := ((select Offers) order by -'Last modified').{
              image: ShareLink,
              offernumber: 'Offer Number',
              employer: 'a_Responsible Person'.Name,
              bidstart: format('Bid Start Date', "DD MMMM YYYY"),
              stage: text(Stage),
              status: text(Status),
              idie: Id,
              expected: format('Expected Close', "DD MMMM YYYY"),
              lastmodified: format('Last modified', "DD MMMM YYYY HH:mm")
          };
      let n := number('Sorting Order');
      let list := switch n do
          case 1:
              (me order by stage = "Lead")
          case 2:
              (me order by stage = "Contracted")
          case 3:
              (me order by stage = "Proposal")
          case 4:
              (me order by stage = "Negotiation")
          case 5:
              (me order by stage = "Closing")
          default:
              me
          end;
      
      • Pushing the Boundaries of Ninox
      • Gotje_Ing
      • vor 1 Stunde
      • Gemeldet - anzeigen

       I think ordering by boolean is not possible. Convert to number by 
       

      (me order by number(stage = "Lead"))
      • Rafael_Sanchis
      • vor 1 Stunde
      • Gemeldet - anzeigen

       

      Thanks Götje

Content aside

  • Status Answered
  • vor 1 StundeZuletzt aktiv
  • 17Antworten
  • 145Ansichten
  • 6 Folge bereits