Mam tabele: ksiazki
id tytul opis pkt glosow odslon
gdzie:
tytul - tytul ksiazki
pkt - suma ocen oddanych na ksiazke gdzie maksymalna ocena to 6pkt.
glosow - liczba oddanych głosów na ksiazke
odslon - liczba odsłon książki, ile razy była odwiedzana strona książki przez użytkowników/gości
średnią ocenę książki obliczam ze wzoru (pkt/glosow)
np. dwie osoby oddały oceny jedna 4 druga 6, więc pole pkt=6+4=10, a pole glosow=2. Średnia ocena książki to 10/2=5
Teraz chciałbym posortować w pewien specyficzny sposób wyniki zwracane przez wyszukiwarkę.
Przykład ktoś wpisuje w szukarce hasło: "opowieść o"
wynik zapytania powinien zwrócić w pierwszej kolejności:
1) książki które w tytule składają się dokładnie z dwóch słów: "opowieść o" (nie ma znaczenia kolejność występowania słów)
[w tym przypadku raczej tylko jedna książka będzie pasowała do tego kryterium, chyba że są dwie książki o tym samym tytule lub zmienionej kolejności słów]
a) książki te są następnie uporządkowane tak, że:
a1) książki powyżej 1000 odsłon, są sortowane w ten sposób że jeśli mają powyżej 10 oddanych głosów to są sortowane po najwyższej średniej. Natomiast jeśli mają poniżej 10 głosów to są sortowane po liczbie odsłon DESC
a2) książki do 1000 odsłon są sortowane w ten sposób że jeśli mają powyżej 5 oddanych głosów to są sortowane po najwyższej średniej. Natomiast jeśli mają poniżej 5 głosów to są sortowane po liczbie odsłon DESC
2) książki które w tytule zawierają trzy słowa w tym: "opowieść o" (np. takie wyniki pasowałyby: opowieść o dowolne_slowo, dowolne_slowo o opowieść, o dowolne_slowo opowieść, itd...)
a) książki te są następnie uporządkowane tak, że:
a1) książki powyżej 1000 odsłon, są sortowane w ten sposób że jeśli mają powyżej 10 oddanych głosów to są sortowane po najwyższej średniej. Natomiast jeśli mają poniżej 10 głosów to są sortowane po liczbie odsłon DESC
a2) książki do 1000 odsłon są sortowane w ten sposób że jeśli mają powyżej 5 oddanych głosów to są sortowane po najwyższej średniej. Natomiast jeśli mają poniżej 5 głosów to są sortowane po liczbie odsłon DESC
3) książki które w tytule zawierają cztery słowa w tym: "opowieść o" (np. dowolne_slowo2 opowieść o dowolne_slowo, itd...)
a) książki te są następnie uporządkowane tak, że:
a1) książki powyżej 1000 odsłon, są sortowane w ten sposób że jeśli mają powyżej 10 oddanych głosów to są sortowane po najwyższej średniej. Natomiast jeśli mają poniżej 10 głosów to są sortowane po liczbie odsłon DESC
a2) książki do 1000 odsłon są sortowane w ten sposób że jeśli mają powyżej 5 oddanych głosów to są sortowane po najwyższej średniej. Natomiast jeśli mają poniżej 5 głosów to są sortowane po liczbie odsłon DESC
4) ....
5) ...
Sortowanie w ten sposób aż do najdłuższego tytułu książki który zawiera w sobie słowa: "opowieść o"
Czy takie posortowanie wyników przez zapytanie SQL jest możliwe? Czy może powinienem napisać odpowiednią funkcję w php która będzie sortowała tablicę z wynikami zawierającymi w tytule hasło: "opowieść o", i dopiero po posortowaniu tej tablicy pobierze książki z bazy w odpowiedniej kolejności.
A może w ogóle nie opłaca się robić takiego sortowania bo jest to zbyt złożone i nie wydajne?