Najpierw zajmiemy siÄ™ sortowaniem danych. Wbrew pozorom jest to dosyć ważne zagadnienie, gdyż dobrze uÅ‚ożony warunek sprawia, kod PHP, czy ASP staje siÄ™ nawet o 300 linii krótszy :).
Bardzo dawno temu zastaÅ‚a mnie taka oto sytuacja: miaÅ‚em tabelÄ™ w bazie, w której byÅ‚o 6 pól typu logicznego (TINYINT(1)). MusiaÅ‚em posortować zawartość bazy wzglÄ™dem iloÅ›ci pól, które majÄ… wartość 1. NależaÅ‚o zsumować wiÄ™c wartoÅ›ci ich wszystkich i posortować wzglÄ™dem wyniku. Nie znaÅ‚em wtedy MySQL'a tak dobrze, jak teraz i jak gÅ‚upi próbowaÅ‚em zrobić to za pomocÄ… PHP. Kod rozrósÅ‚ siÄ™ niemiÅ‚osiernie, a efekt nie byÅ‚ zadowalajÄ…cy. Teraz proponujÄ™ takie rozwiÄ…zanie, które nie dość, że jest krótsze, to jeszcze wygodniejsze. Utwórz sobie w bazie tabelÄ™:
CREATE TABLE bool_sort ( id smallint(10) NOT NULL AUTO_INCREMENT, s1 tinyint(1), s2 tinyint(1), s3 tinyint(1), s4 tinyint(1), s5 tinyint(1), PRIMARY KEY (id) ); INSERT INTO bool_sort VALUES (1, 1, 1, 0, 0, 1); INSERT INTO bool_sort VALUES (2, 0, 0, 0, 0, 0); INSERT INTO bool_sort VALUES (3, 1, 1, 1, 1, 1); INSERT INTO bool_sort VALUES (4, 0, 1, 0, 1, 0); INSERT INTO bool_sort VALUES (5, 0, 1, 1, 1, 1);
Mamy tutaj tabelÄ™ z piÄ™cioma polami logicznymi (czyli mogÄ…cymi przyjmować wartość 0 lub 1). NastÄ™pnie wypeÅ‚niamy jÄ… danymi. Każdy rekord ma pewnÄ… ilość pól ustawionych na 1. Aby posortować jÄ… wedÅ‚ug tej iloÅ›ci, korzystamy z zapytania:
SELECT id FROM bool_sort ORDER BY (s1 + s2 + s3 + s4 + s5)
Możesz teraz przetestować to zapytanie i upewnić siÄ™, że dobrze posortowaÅ‚o. PrzejdÄ„my do jego omówienia. Jak widzisz, sortujemy wzglÄ™dem SUMY kilku pól - takie coÅ› jest dozwolone. Wbrew pozorom SQL wcale takim gÅ‚upim jÄ™zykiem nie jest. Bez problemu obsÅ‚uguje te i inne wyrażenia (bo tak siÄ™ nazywajÄ… dwie wartoÅ›ci połączone operatorami). Nawias z sumÄ… pól możesz przenieść także do zbioru wyników, aby z kolei zapytanie zwróciÅ‚o Ci odpowiednie wartoÅ›ci.
Waszym zdaniem:
Uwaga: To jest jedynie część artykułu. Komentarze dotyczą całości tekstu.
Nikt jeszcze nie dodał swojego komentarza. Możesz być pierwszy!