Eigentlich nicht, es gibt doch keine konkurrierenden Einträge, denn was mit "au" anfängt, fängt nicht mit "bah" an?!
Vielleicht verstehe ich dich aber auch immer noch falsch, habe allerdings vor kurzem ein ähnliches Problem gelöst. Es ging um eine Suche, die z.B. "au bah" priorisiert verarbeiten kann, in dem sie
prüft ob eine Spalte exakt einem der Werte entspricht (sehr hohe Priorität), damit beginnt (hohe Priorität) oder ob der Begriff darin vorkommt (normale Priorität). Das ganze für alle ausgewählten Spalten und Begriffe.
Du musst dabei wie von mir vorgeschlagen vorgehen - sofern ich deine Intention zumindest richtig verstanden habe:
Code:
SELECT
IF (LEFT(spalte1, LENGTH("au")) = "au", 1, 0) AS prio_1,
IF (LEFT(spalte1, LENGTH("bah")) = "bah", 1, 0) AS prio_2,
IF (LEFT(spalte1, LENGTH("au")) = "au", 1, 0)
+ IF (LEFT(spalte1, LENGTH("bah")) = "bah", 1, 0) AS relevance
FROM
table
ORDER BY
IF (LEFT(spalte1, LENGTH("au")) = "au", 1, 0)
+ IF (LEFT(spalte1, LENGTH("bah")) = "bah", 1, 0) DESC
Sieht nach etwas viel if-Bedingungen aus, ist aber - falls du nicht FULLTEXT verwenden willst oder kannst (innoDB) - kaum zu vermeiden (evtl. im relevance beim SELECT). Das Ergebnis erlaubt dir aber genau herauszufinden warum ein Ergebnis so "relevant" bewertet wurde. Es findet übrigens auch weniger relevante Ergebnisse. Falls du das vermeiden möchtest, musst du relevance > 0 in die Bedingung packen.
Wenn du die angesprochene Priorisierung haben möchtest, musst du einen Multiplikator einführen:
Code:
IF (LEFT(spalte1, LENGTH("au")) = "au", 1, 0) * 1.1
+ IF (LEFT(spalte1, LENGTH("bah")) = "bah", 1, 0) * 1.09
War das in etwa was du gesucht hast?