[SQL] order by position von like

Dieses Thema im Forum "Webentwicklung" wurde erstellt von encud, 8. September 2010 .

Schlagworte:
  1. 8. September 2010
    order by position von like

    Hallo zusammen!

    Bin auf der suche nach einer Möglichkeit meine Werte danach zu ordnen, an welcher stelle "LIKE" trifft.

    hab also eine query:
    PHP:
    SELECT  FROM table WHERE row LIKE  "%wert%"
    Wenn ich also nach "auto" such und in der tabelle hab ich
    1. umweltauto
    2. automobil
    3. Maschinenautomatik
    4. Auto
    will ich das ganze in folgender reihenfolge ausgegeben bekommen:
    1. Auto (trifft komplett)
    2. automobil (trifft am anfang)
    3. umweltauto (6 zeichen bis zum suchbegriff)
    4. Maschinenautomatik (9 zeichen bis zum suchbegriff)

    gibt es dafür oder für sowas in der art einen order by befehl, oder ein work around?

    Hab mit sql noch nicht viel gemacht und google war diesmal auch nicht ein freund, deshalb frag ich mal euch, hoffe ihr könnt mir helfen

    gruß encud
     
  2. 8. September 2010
    AW: order by position von like

    mit LOCATE kannst ermitteln wo sich das wort befindet.

    Code:
    SELECT 
     -- etc ...
     IF(`row` = "auto", 0, LOCATE("auto", `row`)) `position`
    FROM `table`
    WHERE `row` LIKE "%auto%"
    ORDER BY `position` ASC 
     
  3. 8. September 2010
    AW: order by position von like

    hi,

    sql ist leider nicht meine stärke, daher weis ich nicht ob man es über ein query abfragen kann.
    ich würde wohl den umständlichen weg gehen und in der schleife dein wort per
    strpos() abfragen und in ein array positionieren.

    // edit
    ok murdoc war schneller und was wären wir ohne ihn.
    danke murdoc ich lerne von dir echt viel.
     
  4. 8. September 2010
    AW: order by position von like

    du sagst es^^

    und jetzt hätte ich fast schon wieder rumgemeckert das es nicht klappt, aber hatte nur ein Kommer vergessen

    besten dank
     
  5. 10. September 2010
    AW: order by position von like

    muss nochmal nerven...

    will meine suche von oben nun ein bisschen erweitern.
    hab ne andere spalte in der tabelle die wie folgt aussehen könnte:
    Code:
    1;2;5;3
    Ist ein Varchar und die nummern können nur einmal vorkommen.

    jetzt will ich mehrmals testen ob verschiedene zahlen in dieser spalte sind. wenn die zahl nur einmal getroffen wird soll die spalte ausgegeben werden:
    Code:
    WHERE `row` LIKE "%1;%" OR `row` LIKE "%5;%" OR etc.
    Die anzahl der abzufragenden zahlen ist dabei unbekannt.

    jetz möchte ich das natürlich in der reihenfolge ordnen wie viele sätze getroffen wurden, wenn also alle zahlen vorkommen soll es ganz oben stehen und wen nur eine zahl gestimmt hat ganz unten.

    Hab mich da gerade schonmal ins thema Volltextsuche eingelesen aber ich hab immer mehr das gefühl das das nicht das richtige ist.
    außerdem hab ich auch angst das wenn ichs mit like mache das die datenbank schnell verlangsamt

    hoffe ich bekomme nochmal hilfe^^
     
  6. 10. September 2010
    AW: order by position von like

    zuerst: mach aus den ganzen LIKE's einen regex. der sollte schneller und genauer sein.
    LIKE "%5;%" würde nämlich auch "12345;" finden usw...

    Code:
    WHERE `row` REGEXP "(?:^|;)(?:1|2|3|4|5)(?:;|$)"
    
    oder
    
    WHERE `row` REGEXP "[[:<:]](?:1|2|3|4|5)[[:>:]]"
    ordnen musst dus dann mit php (was auch immer), denn so wie du dir das vorstellst ist schlicht nicht möglich mit nem query.
     
  7. 12. September 2010
    AW: order by position von like

    ja danke für den tipp, hatte ich nicht weiter drüber nachgedacht weil meine datenbank noch etwas anders aussieht, aber danke

    dann will ich mal mit php mein glück versuchen, gut zu wissen, dass es mit sql nicht geht und ich noch 3 stunden vergeblich nach einer lösung google xD

    edit: ich will das ganze einmal mit OR und einmal mit AND machen...
    Bei der Variante mit OR macht es sinn nen regulären ausdruck zu machen aufgrund der geschwindigkeit.
    Wenn ich nun aber nicht weiß in welcher reihenfolge die daten in der datenbank stehen, kann ich das nicht mit einem regulären ausdruck machen, oder?
    dann macht aus geschwindigkeitsgründen mit sicherheit "LIKE AND LIKE AND etc." am meisten sinn, seh ich das richtig?
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.