#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 umweltauto automobil Maschinenautomatik Auto will ich das ganze in folgender reihenfolge ausgegeben bekommen: Auto (trifft komplett) automobil (trifft am anfang) umweltauto (6 zeichen bis zum suchbegriff) 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 + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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^^ + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren
#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? + Multi-Zitat Zitieren