Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Limit tylko na wybrana kolumne
Forum PHP.pl > Forum > Bazy danych > MySQL
Arriss
Ciezko bylo mi nawet zatytulowac temat. Potrzebuje zapytania ktore pokaze mi powiedzmy 20 osob z najwieksza iloscia punktow o statusie 1 ale jesli w meidzyczasie bedzie ktos o statusie 0 rowniez wyswietli. Limit ma sie konczyc na 20 osobie o statusie 1. Czyli jesli w srodku bedzie 5 osob o statusie 0 to wyswietli 25 wpisow. Wiem ze zagmatwane. Dziekuje za wszystkie porady i naprowadzenia. Nie pogardzilbym przykladowym zapytaniem.
wookieb
To podaj strukture tabeli i przykładowe dane. Najlepiej w formie zapytania i wyjaśnij co to znaczy "w międzyczasie" bo nie wyraziłeś się dostatecznie jasno.
Arriss
SELECT * FROM tabela WHERE ranking<>'0' AND stat='1' ORDER BY ranking DESC LIMIT 20

wyswietli mi 20 pierwszysch osob w rankinu

jednak mam tez ludzi ktorzy maja stat=0 i chce ich tez pokazac w rankingu jednak chce zeby ranking konczyl sie na 20 osobie o satusie 1 niezaleznie ile osob o statusie 0 ma wiecej punktow w rankingu.

Dam przyklad

1 user 1 status 1
2 user 2 status 1
.....
20 user20 status 1

a chce

1 user 1 status 1
2 user 2 status 0
.....
5 user 5 status 0
...
20 user20 status 1
21 userx status 1
22 usern status 1

chodzi mi zeby ranking konczyl sie na 20 osobie o danym statusie niezaleznie ile podrodze wyswietli osob o innym statusie.
Mchl
Kod
(SELECT 20 osób ze statusem 1)
UNION
(SELECT osoby ze statusem 0)
Arriss
Próbowalem i wyswietlilo mi cos typu

1 user stat 1
2 user stat 1
20 user stat 1
1 users stat0
2 user stat 0
20 users stat 0

czyli lacznie wyswietlio mi 40 osob nieposortowanych
Mchl
I nie dasz rady dodać sortowania?
Kod
SELECT * FROM
(SELECT 20 osób ze statusem 1)
UNION
(SELECT osoby ze statusem 0)
ORDER BY...
phpion
@Mchl:
Chyba źle zrozumiałeś problem. Nie jest on tak banalny jak się z pozoru wydaje. Zapewne chodzi o coś takiego (zamiast 20 przyjmuję 3 wpisy do pokazania):

Wariant A:
id | status
1 | 1
2 | 1
3 | 1

Wariant B:
id | status
1 | 1
4 | 0
2 | 1
3 | 1

Po drodze wskakuje użytkownik o statusie 0, jednak w wyniku nadal mamy 3 rekordy ze statusem 1 (a tych ze statusem 0 jest tyle, ile jest ich "po środku").
Arriss
Dokladnie o to chodzi. Najtrudniej jest wytlumaczyc innym o co chodzi biggrin.gif
Mchl
I sortowanie jest po jakowymś polu zwanym ranking, jak rozumiem?

To może tak?

Kod
(SELECT ... FROM tabela WHERE status = 1 ORDER BY ranking DESC LIMIT 20)
UNION
(SELECT ... FROM tabela AS t1 INNER JOIN (SELECT ... FROM tabela WHERE status = 1 ORDER BY ranking DESC LIMIT 19,1) AS t2 ON t1.ranking <= t2.ranking WHERE status =0 ORDER BY ranking DESC)
Arriss
Cos nie dzialalo mi to zapytanie. Po ponownym przemysleniu postawnowilem liczyc ludzi z odpowiednim statusem a pozniej dac ifa i jesli jest wiecej to break; i po sprawie. Dzieki wszystkim za pomoc.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.