Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Sprawdzenie czy pozycja jest najwyższa/najniższa względem grupy
Mephis
post
Post #1





Grupa: Zarejestrowani
Postów: 94
Pomógł: 1
Dołączył: 16.12.2012

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


Witam.

Posiadam listę składającą się z identyfikatora, jakieś nazwy oraz pozycji (w celu sortowania). Do zapytania dołączam 2 kolumny - on_top oraz on_bottom, których celem jest zwrócenie prawdy lub fałszu jeżeli pozycja jest najwyższa (najniższa wartość) lub najniższa (najwyższa wartość). Te dodatkowe kolumny będą służyć mi w celu sprawdzenia, czy dany rekord będzie można przenieść wyżej, bądź niżej. Do tego stosuję takie oto zapytanie:
  1. SELECT `pozycja`,
  2. (CASE WHEN `pozycja` = (SELECT Min(`pozycja`) FROM `tabela`) THEN 1 ELSE 0 END) AS `on_top`,
  3. (CASE WHEN `pozycja` = (SELECT Max(`pozycja`) FROM `tabela`) THEN 1 ELSE 0 END) AS `on_bottom`
  4. FROM `tabela`;

p - pozycja, t - rekord na górze, b - rekord na dole
+----------+
| p | t | b |
+----------+
| 1 | 1 | 0 |
| 2 | 0 | 0 |
| 3 | 0 | 0 |
| 4 | 0 | 1 |
+----------+

I działa jak powinno. Do tego mam podobną tabelę, z tym, że do każdego rekordu jest dodana grupa. I tutaj pytanie brzmi: jak skonstruować zapytanie, które uczyni mi coś podobnego jak niżej? Chodzi o to, aby wartości 'on_top' i 'on_bottom' ustalane były zależnie zarówno względem pozycji ale i też grupy.
g - grupa
+--------------+
| g | p | t | b |
+--------------+
| 1 | 1 | 1 | 0 |
| 1 | 2 | 0 | 0 |
| 1 | 3 | 0 | 1 |
| 2 | 4 | 1 | 0 |
| 2 | 5 | 0 | 0 |
| 2 | 6 | 0 | 0 |
| 2 | 7 | 0 | 1 |
+--------------+
Go to the top of the page
+Quote Post
mar1aczi
post
Post #2





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

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


  1. SELECT `poz`,
  2. (CASE WHEN `poz` = (SELECT Min(`poz`) FROM `pozycje` WHERE gr = sq.gr) THEN 1 ELSE 0 END) AS `on_top`,
  3. (CASE WHEN `poz` = (SELECT Max(`poz`) FROM `pozycje` WHERE gr = sq.gr) THEN 1 ELSE 0 END) AS `on_bottom`
  4. FROM `pozycje` AS sq;
Go to the top of the page
+Quote Post
Mephis
post
Post #3





Grupa: Zarejestrowani
Postów: 94
Pomógł: 1
Dołączył: 16.12.2012

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


Niestety nie działa. W takim przypadku pierwszy rekord wyświetla 'on_top' i 'on_bottom' jako prawdę, reszta fałsz.
Go to the top of the page
+Quote Post
mar1aczi
post
Post #4





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

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


Rozwiń swoją myśl, bo nie rozumiem. Zerknij tu: http://sqlfiddle.com/#!9/1c38a/7/0
Go to the top of the page
+Quote Post
Mephis
post
Post #5





Grupa: Zarejestrowani
Postów: 94
Pomógł: 1
Dołączył: 16.12.2012

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


Najwyraźniej gdzieś popełniłem jakąś literówkę. Poprawiłem i wszystko działa jak należy.

Dziękuję uprzejmie za pomoc.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 19:19