Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Skomplikowane sortowanie książek
Rude Dude
post
Post #1





Grupa: Zarejestrowani
Postów: 41
Pomógł: 1
Dołączył: 23.07.2007

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 21:08