Cały bajer polega na tym, że jest sobie tabela z klientami. Każdy z nich ma jakiś nick (unikatowy) oraz jakieś nieistotne w tym przypadku dane. Jest też druga tabela z aliasami, w której są dodatkowe nicki dla klienta.
Wyszukiwarka ma za zadanie wyszukiwać klientów w obydwu tabelach na raz.
Zapytanie, które to realizuje wygląda tak:
SELECT *, klient.id_klient AS id_klient FROM klient LEFT JOIN alias ON klient.id_klient = alias.id_klient WHERE id_user IS NOT NULL AND ( LOWER(nick) LIKE LOWER('%$nick%') OR LOWER(alias) LIKE LOWER('%$nick%') )
Wszystko wydaje się być OK, ale trafił się dziwny przypadek.
Mam klienta o bazowym nicku "car-ledam", czyli to jest nick z tabeli klienci. Ten sam klient ma tez dwa aliasy przypisane w drugiej tabeli "car_ledam" oraz "carledam".
Teraz gdy do zapytania podstawimy nick "carledam" otrzymamy jeden wynik co jest zgodne z założeniami, ale gdy tylko podstawimy "car-ledam" lub "car_ledam" zawsze wynik jest zdublowany i pokazują się dwa rekordy (te same oczywiście).
Czy ktoś może mi wytłumaczyć dlaczego się tak dzieje?