Hello,
yo,
rühmst du dich nicht immer, wenigstens zum thema datenbanken hier auch ab und an mal was fachlich sinnvolles beizutragen zu haben ...?
ich denke mal, wir alle haben unsere stärken und schwächen, deine lösung ist meiner meinung nach auch nicht das gelbe vom ei. es zeigst sich doch immer wieder, dass wir alle "nur" menschen sind....
Lock
SELECT [spalten] FROM tabelle WHERE [match_cat] = $suchbegriff
SELECT [spalten] FROM tabelle WHERE [match_cat] < $suchbegriff ORDER BY [match_cat_idx] DESC LIMIT 1
SELECT [spalten] FROM tabelle WHERE [match_cat] > $suchbegriff ORDER BY [match_cat_idx] ASC LIMIT 1
unlock
Das ist zwar nicht ganz billig, aber er wird zwangsweise über die Suchbegriffe einen eigenen Index aufmachen müssen. Ob MySQL allerdings merkt, dass es diesen Index über die drei Spalten auch in der ersten Abfrage benutzen darf, weiß ich noch nicht.
[match_cat] = [spalte1] + [spalte2] + [spalte3]
[match_cat_idx] ist der Index über diese Contatination
Die Bindung durch Lock ist unbedingt erforderlich, solange es kein Common oder Union gibt.
Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau