![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 80 Pomógł: 0 Dołączył: 27.05.2009 Ostrzeżenie: (0%) ![]() ![]() |
Uszanowanie,
Mam uprzejme zapytanie, muszę wykonać system głosowania, i już teraz w trakcie tworzenia aplikacji muszę przemyśleć co będzie działo się "pod obciążeniem". Załóżmy że baza danych miała by następującą konstrukcję ID,id_glosowania,id_oddajacego,głos Przykładowy wpis mógł by brzmieć: 1 1 666 1 2 1 777 0 3 1 555 0 4 1 888 0 Co za tym idzie, oddano trzy głosy (negatywne) i jeden pozytywny. Tylko musimy założyć że takich głosów było by np 1500. Teraz istnieje potrzeba utworzenia rankingu, kto był najlepszy a kto najgorszy. Takim prostym sposobem jaki przychodzi mi do głowy to liczba pozytywnych głosów / negatywnych no i dostajemy wartość z dzielenia, którą porządkujemy w jakiś sposób, to już zależy od formy prezentacji czy rosnąco, czy nie rosnąco, wynik tak otrzymany mogli byśmy pokusić się o nazwanie mianem "wagi". Problem jest taki, jak się za to zabrać... Głupotą było by w php, w pętli "FOR" zliczać po kolei row[glos] i dzielić wynik, bo zabił bym apache, i i na dodatek administrator by mnie wyrzucił z takim kodem ![]() Czy dało by się to zrobić w jednym zapytaniu do serwera SQL ? Tak abym w wyniku otrzymał gotową wartość ? waga=0,7. Dwa, jak bardzo obciąża takie zapytanie serwer SQL ? Jeżeli musi przeliczyć np te "wagę" z 1500 głosów ? Proszę wybaczyć moje pytanie, ale nigdy osobiście nie miałem do czynienia z serwerem MySQL na środkowisku produkcyjnym z takim REQUESTEM. Za wszelkie przykłady, itp, itd, będę niezmiernie wdzięczny ![]() Ten post edytował ahold 27.05.2009, 21:04:01 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 385 Pomógł: 26 Dołączył: 22.03.2008 Skąd: TM Ostrzeżenie: (0%) ![]() ![]() |
Hm, Tobie chodzi o wyłonienie z bazy danych ilości wpisów które mają głos=1 i glos=0 ? Jesli tak, to masz gotową funkcję mysql_num_rows.. Jeśli źle zrozumiałęm co chcesz osiągnąć, to sory
![]() -------------------- Zapraszam na mojego bloga. Dowiedz się jak uzyskać darmowy, zaufany certyfikat albo jak rozpoznawać głos ;)
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 80 Pomógł: 0 Dołączył: 27.05.2009 Ostrzeżenie: (0%) ![]() ![]() |
Uszanowanie,
Potrzebuję kolego wyciągnąć stosunek głosów pozytywnych do negatywnych ![]() Pobrać ilość głosów pozytywnych Pobrać ilość głosów negatywnych Podzielić jedne przez drugie i wyświetlić wynik Normalnie, musiał bym to zrobić na 3 zapytania. 1) SELECT where głosy = negatywne - liczbe do zmiennej z1 2) SELECT where głosy= pozytywne - liczbe do zmiennej z2 wynik = z1 / z2 Tylko, że tak wynik NIC MI NIE DAJĘ bo nie mogę posortować według niego ![]() Marzy mi się, że wyświetlę TOP 5 głosowań. Czyli: SLECT xxx ORDER BY ( WAGA GŁOSU, która magicznie jakoś wyczarujemy, czyli podzielony stosunek negatywnych do pozytywnych) LIMIT 5 pozdrawiam |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 162 Pomógł: 26 Dołączył: 19.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
Spróbuj:
gdzie id to identyfikator głosowania, val - wartość głosu =1 pozytywny =0 negatywny w twoim przypadku id to 2-ga kolumna, val to 4-ta Ten post edytował kitol 28.05.2009, 13:16:21 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 80 Pomógł: 0 Dołączył: 27.05.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witaj kolego,
Przepraszam że odpisuję dopiero teraz, ale miałem dużo zajęć. Twój kod działa idealnie. Sęk w tym, że nie przewidzieliśmy w tym algorytmie pewnej opcji. 1 głos na tak daje mi wagę 1.0000 :/ a 5 głosów na tak i jeden na nie daje 8.333 W związku z powyższym, ten 1 głos po mimo że ma najwyższą wagę, jest mniej obiektywny niż te 5 głosów. Ma ktoś jakiś pomysł, na algorytm który podzielił by to jeszcze w jakiś sposób, tak aby było faktycznie bardziej "bezstronne" ? pozdrawiam |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 162 Pomógł: 26 Dołączył: 19.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witaj,
Spróbuj może poniższego wzoru: waga = (oceny pozytywne / ilość wszystkich ocen ) * (1 - 0,5 / ilość wszystkich ocen) czyli, każda obliczona waga jest mnożona przez współczynnik który zwiększa się od 0,5 dla 1 oceny do prawie 1 dla zwiększających się ilości ocen.W tym przypadku 1 pozytywna ocena zostanie "zaniżona" do 0,5 (czyli średniej ocen). Czym więcej ocen tym bardziej współczynnik przez który mnożymy zbliża się do 1 (czyli ma coraz mniejsze znaczenie) |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 01:12 |