This post comes from the first version of this blog.
Please send me an email if anything needs an update. Thanks!
Kilka dni temu, walcząc z modułem wyświetlającym menu w Joomli trafiłem na dosyć ciekawy problem: jak skonstruować zapytanie do bazy danych tak, aby jedna z kolumn w danych wynikowych została wypełniona kolejnymi numerami zwracanych rekordów? Oczywiście nie muszę mówić, że problem został pomyślnie rozwiązany, a ja zapraszam do lektury niniejszego wpisu.
Problem. Jeśli opisane przeze mnie w nagłówku zjawisko nie jest dostatecznie zrozumiałe, postaram się opisać to na przykładzie. Weźmy pod uwagę tabelę:
|
|
Wykonajmy na niej proste zapytanie:
|
|
Powiedzmy, że mamy w niej następujące dane:
Teraz chcielibyśmy pobrać listę pracowników, dodatkowo sortując ich po kolejnych numerach zwracanych rekordów. Jak tego dokonać?
Rozwiązanie.
Przeszukując Internet trafiłem na dosyć interesujący sposób rozwiązania tego problemu. Na czym on polega?Należy zauważyć, że podczas pobierania danych z tabel, baza danych kieruje się ich kolejnością względem zestawu kluczy głównych. Wystarczy więc pobrać dla każdego rekordu ilość rekordów z tej samej tabeli, które mają, ogólnie mówiąc, “mniejszy” zestaw, niż rekord aktualny. W naszym przypadku, zapytanie będzie wyglądało następująco:
|
|
Wyniki:
Dla każdego rekordu pobieramy ilość rekordów znajdujących się “pod” nim, a więc mających mniejszą wartość klucza głównego “id”. Należy pamiętać, że aby ten sposób działał, dane muszą być porównywalne, tj. muszą być unikalne w skali tabeli, inaczej zapytanie może zwrócić nie do końca oczekiwane wyniki.