Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL] sortowanie wg wartości średniej 2 kolumn, wyniki są na końcu
pjanek
post
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 1.03.2007

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


Witam,
chciałbym prosić o pomoc przy sortowaniu tabeli chodzi oto że:
sortuję tabelę wg wartości średniej dwóch kolumn
  1. <?php
  2. ... WHERE f.id=e.id ORDER BY (f.total_value/f.total_votes) DESC ...
  3. ?>

wynik oczywiście uzyskuję ale na końcu, tz mam załóżmy 50 rekordów, do 5 została dodana ocena i w pierwszej kolejności są wyniki w których pole f.total_value ma wartość 0, a dopiero ostatnie 5 rekordów jest posortowane. Jeśli dam sortowanie ASC zamiast DESC to zmienia sortowanie ale również na końcu czyli najpierw 45 rekordów tam gdzie jest 0, a dopiero ostatnie 5 jest posortowane.
Oczywiście domyślne wartości w tych kolumnach to 0, jak zrobić aby te wyniki gdzie zostały oddane głosy były rzeczywiście na pierwszych miejscach, a dopiero później za nimi te gdzie nie oddano głosów??
proszę o wskazówki
z góry dziękuje
pozdrawiam
Go to the top of the page
+Quote Post
Cienki1980
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


A nie wystarczy dodać do zapytania
  1. WHERE f.total_votes>0 ...


Wtedy będziesz miał tylko te rekordy z głosami i posortowane wg średniej.


--------------------
404
Go to the top of the page
+Quote Post
pjanek
post
Post #3





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 1.03.2007

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


niby wystarczy, ale ograniczyłbym wyniki wyszukiwania tylko do tych rekordów które zostały ocenione, a nie chciałbym tego robić.
Wolałbym aby wyświetlały się wszystkie dane tylko posortowane od największej oceny.
Dręczy mnie myśl dlaczego przy takim założeniu nie sortuje mi tego tak jak powinny, tylko daje na początku pola z wartością 0??

Ten post edytował pjanek 30.09.2007, 12:27:51
Go to the top of the page
+Quote Post
kris2
post
Post #4





Grupa: Zarejestrowani
Postów: 150
Pomógł: 3
Dołączył: 15.08.2007

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


zadaj zapytanie z UNION, jedno o ocenione rekordy a drugie o nieocenione.
Go to the top of the page
+Quote Post
pjanek
post
Post #5





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 1.03.2007

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


sorry, ale czy mógłbyś trochę jaśniej, przyznam że nie bardzo kumam o co chodzi??
Go to the top of the page
+Quote Post
kris2
post
Post #6





Grupa: Zarejestrowani
Postów: 150
Pomógł: 3
Dołączył: 15.08.2007

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


  1. SELECT id, costam*2 AS costam FROM tabela WHERE id>5
  2. UNION
  3. SELECT id, costam*4 AS costam FROM tabela WHERE id<=5


taki przykład, mysle że kumasz

http://en.wikipedia.org/wiki/Union_(SQL) - googlanie nie boli
Go to the top of the page
+Quote Post
pjanek
post
Post #7





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 1.03.2007

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


Cytat(kris2 @ 1.10.2007, 10:16:52 ) *

widzisz aby szukać trzeba wiedzieć co, ja wtedy jeszcze nie widziałem co mam szukać!
Ok może i UNION jest rozwiązaniem ale to ingerencja w zapytanie przed WHERE które mam już skonstruowane i na tym zapytaniu oparte całe wyniki wyszukiwania, wiele by mi to skomplikowało, natomiast chciałbym uzyskać właściwy efekt wpisując odpowiedni warunek czyli po WHERE.
Czy jest to możliwe? Czy może szukam czegoś niemożliwego, proszę o odpowiedz.
Go to the top of the page
+Quote Post
kris2
post
Post #8





Grupa: Zarejestrowani
Postów: 150
Pomógł: 3
Dołączył: 15.08.2007

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


nic co nie zaburzyl tego co masz przed WHERE nie przychodzi mi do glowy smile.gif
Go to the top of the page
+Quote Post

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: 19.08.2025 - 05:37