Ergebnis 1 bis 8 von 8

Thema: Sortierung nach wichtigkeit der Produktsprache

  1. #1
    alexander_ro ist offline Benutzer
    Registriert seit
    12.11.2006
    Beiträge
    82

    Standard Sortierung nach wichtigkeit der Produktsprache

    Hallo,

    ich versuche gerade eine Lösung zu finden wie ich ISO Sprachkürzel (ger, eng, fre, span, usw.) in eine von mir gewünschte Reihenfolge sortieren kann. Als Beispiel soll mal die Reihenfolge oben in den Klammern dienen.

    Gebraucht wird das für eine Produktsuchfunktion. Es wird mit tsearch2 in der Titelspalte nach dem Stichwort gesucht. Die gefundenen Treffer sollen dann nach dem in einer anderen Tabelle hinterlegten Sprachkürzel in nicht alphabetischer Reihenfolge sortiert werden.

    Mir fehlt im moment die Zündende Idee wie ich sowas machen könnte. Beim Suchen habe ich zwar regexp_replace gefunden. Regex ist aber nicht grad mein Fachgebiet :-(. Mein gedanke war die Kürzel durch Nummern zu ersetzen die dann entsprechend sotiert werden. Was aber vermutlich viel Rechenzeit kostet.

    Vielleicht hat ja jemand eine andere Idee (CPU schonend) oder ein Beispiel wie mit Regex sowas aussieht.

    Beste Grüße
    Alexander

  2. #2
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.055

    Standard

    Du könntest zu deiner Tabelle eine weitere Spalte addieren, die einen Sortierwert enthält. Dann kannst du die Ausgabe anhand dieses Wertes sortieren ...
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  3. #3
    alexander_ro ist offline Benutzer
    Registriert seit
    12.11.2006
    Beiträge
    82

    Standard

    Danke für die schnelle Antwort die Idee ist gut aber ich würde lieber eine Lösung verwenden die nicht in der Tabelle gespeichert wird und sozusagen statisch ist.

    Warum nicht ist leicht erklärt: Die Suchfunktion muß für verschiedene Länder arbeiten und da hat jedes Land natürlich die priorität auf der Landessprache. Der Suchfunktion wird das Land beim Aufruf als Parameter übergeben und dann sollen die Ergebnisse entsprechend dem Land zurückgegeben werden.

    Am liebsten wäre mir eine Lösung die ich in meiner SQL-Abfrage unterbringen kann und keine weiteren externen Daten brauche. Ob das realistisch ist, hm... vermutlich nicht da es doch sehr viele vorkommende Kürzel gibt.

    Wenn mit einer externen Daten dann in einer eigenen Tabelle so nach dem prinzip:
    <Land><Sprachkürzel><Priorität>.
    Aber wie sortiert man mit einer zusätzlichen Tabelle?
    Hm..., mit einem join, sehe ich das richtig.

    Alexander

  4. #4
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.465

    Standard

    Zitat Zitat von alexander_ro Beitrag anzeigen
    Danke für die schnelle Antwort die Idee ist gut aber ich würde lieber eine Lösung verwenden die nicht in der Tabelle gespeichert wird und sozusagen statisch ist.
    Bitteschön:

    Code:
    test=*# select * from foo;
      f
    ------
     ger
     fre
     eng
     usw
     span
    (5 rows)
    
    Time: 1.087 ms
    test=*# select f from foo order by case when f='ger' then 1 when f='eng' then 2 when f='fre' then 3 when f='span' then 4 when f='usw' then 5 end;
      f
    ------
     ger
     eng
     fre
     span
     usw
    (5 rows)

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  5. #5
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.055

    Standard

    Das funktioniert, würde ich aber mal noch auf Performance Fragen abklopfen ... durch die vielen CASE wird das ev. langsam.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  6. #6
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.465

    Standard

    Zitat Zitat von ads Beitrag anzeigen
    Das funktioniert, würde ich aber mal noch auf Performance Fragen abklopfen ... durch die vielen CASE wird das ev. langsam.
    Sicher, da hilft auch kein Index. Aber Deine, bessere Lösung gefiel ja dem Fragesteller nicht...

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  7. #7
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.465

    Standard

    Zitat Zitat von alexander_ro Beitrag anzeigen
    Danke für die schnelle Antwort die Idee ist gut aber ich würde lieber eine Lösung verwenden die nicht in der Tabelle gespeichert wird und sozusagen statisch ist.

    Warum nicht ist leicht erklärt: Die Suchfunktion muß für verschiedene Länder arbeiten und da hat jedes Land natürlich die priorität auf der Landessprache. Der Suchfunktion wird das Land beim Aufruf als Parameter übergeben und dann sollen die Ergebnisse entsprechend dem Land zurückgegeben werden.

    Am liebsten wäre mir eine Lösung die ich in meiner SQL-Abfrage unterbringen kann und keine weiteren externen Daten brauche. Ob das realistisch ist, hm... vermutlich nicht da es doch sehr viele vorkommende Kürzel gibt.

    Wenn mit einer externen Daten dann in einer eigenen Tabelle so nach dem prinzip:
    <Land><Sprachkürzel><Priorität>.
    Nix anderes hat ads Dir vorgeschlagen.

    Aber wie sortiert man mit einer zusätzlichen Tabelle?
    Hm..., mit einem join, sehe ich das richtig.

    Alexander
    Ja, man kann das auch von hinten durch die Brust ins Knie machen:

    Code:
    test=*# create table f_sort (f text, s int);
    CREATE TABLE
    test=# copy f_sort from stdin;
    Enter data to be copied followed by a newline.
    End with a backslash and a period on a line by itself.
    >> ger  1
    >> eng  2
    >> fre  3
    >> span 4
    >> usw  5
    >> \.
    
    test=# select foo.f from foo join f_sort s using (f) order by s.s;
      f
    ------
     ger
     eng
     fre
     span
     usw
    (5 rows)
    Und um nun noch die eigene Landessprache zu bevorzugen, kanst Du auch hier mit CASE arbeiten:

    Code:
    -- angenommen, die Sprache 'usw' sei unsere Muttersprache
    test=*# select foo.f from foo join f_sort s using (f) order by case when foo.f = 'usw' then 0 else s.s end;
      f
    ------
     usw
     ger
     eng
     fre
     span
    (5 rows)
    Damit hast Du Dein Ziel, die Sortierung in einer extra Tabelle zu haben, erreicht. Für den Preis eines extra joins, ansonsten ist es exakt ads seine Lösung.


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  8. #8
    alexander_ro ist offline Benutzer
    Registriert seit
    12.11.2006
    Beiträge
    82

    Standard

    Auf die Idee in einem "order by" einen case zu verwenden bin ich noch gar nicht gekommen und dass das mit der zusätzlichen Tabelle nur eine Variation der von ads vorgeschlagenen Lösung ist mir schon klar.

    Es ist sicher ein Umweg aber mit einer eigenen Tabelle habe ich halt die flexibilität für jedes Land eine vollständig eigene Sortierreihenfolge festlegen zu können. Auserdem trenne ich so diese Information von den restlichen Daten die ja sehr häufig gelöscht und neu importiert werden und ich dann immer bei jedem Datensatz die Sortierinformation mitpflegen müsste. Ich werde mal testen wie sich die verschiedenen Lösungen verhalten und dann entscheiden welche ich baue.

    Alexander

Ähnliche Themen

  1. Frage sortierung nach errechneten werten aus selber tabelle
    Von emanymton im Forum Allgemeines
    Antworten: 2
    Letzter Beitrag: 14.09.2011, 16:46
  2. Frage ORDER BY Sortierung
    Von cscompute im Forum SQL
    Antworten: 5
    Letzter Beitrag: 28.03.2011, 23:25
  3. Frage Sortierung nach Liste
    Von traxanos im Forum SQL
    Antworten: 10
    Letzter Beitrag: 14.07.2010, 07:05
  4. Sortierung
    Von minor_73 im Forum SQL
    Antworten: 3
    Letzter Beitrag: 18.12.2009, 11:31
  5. Art der Sortierung
    Von PeeDee im Forum SQL
    Antworten: 12
    Letzter Beitrag: 01.12.2006, 13:31

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum