Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie mysql
Forum PHP.pl > Forum > Bazy danych > MySQL
kepke
Musze zrobic cos takiego. Pobrac z bazy a dokladniej z komorki 'miasto' wszystkie rekordy i wyswietlic je w selekcie alfabetycznie. Chodzi mi o to zeby sie nie powtarzaly. Np ulozyc miasta: Kraków, Krynica, Kryspinów itd
Jak cos takiego zrobic?
Jojo
  1. SELECT miasto FROM tabela GROUP BY miasto ORDER BY miasto ASC

Nie jestem pewien czy zadziała ale powinno. Jakby były jakieś błędy to napisz.
FiDO
  1. SELECT DISTINCT miasto FROM tabela ORDER BY miasto
kepke
To takie proste zapytanie ma byc? Ale chyba to nie uwzgledni tego zeby nie powtarzac rekordow. Musze sprowbowac zaraz. Dzieki

To ktore bedzie lepsze?
FiDO
Oba uwzglednia niepowtarzalnosc miast, aczkolwiek wg mnie bardziej nadaje sie to z DISTINCT, poniewaz dedykowanym przeznaczeniem tej klauzuli jest wlasnie zwracanie unikalnych wynikow, w przypadku GROUP BY jest to jakby dzialanie uboczne.
Jojo
Cytat(FiDO @ 2004-08-08 23:26:34)
  1. SELECT DISTINCT miasto FROM tabela ORDER BY miasto

FiDO: Kiedyś w jakimś zapytaniu użyłem SELECT DISTINCT ale zapytania strasznie wolno się wykonywały (kilkakrotnie dłużej niż z GROUP BY).
Nie orientujesz się czy możliwe jest aby była taka różnica?
FiDO
Szczerze mowiac nie.. sprawdze u siebie czy tez bede tak mial.

PS. Duza ta tabela byla ? Wyciagales tylko jedna kolumne czy wiecej ?
kepke
Tak w ogole to dzieki chlopaki za pomoc winksmiley.jpg
Oba daja takie same wyniki a z szybkoscie to ja nie wiem bo nie mam tak rozbudowanej bazy.
Jojo
Wyciągałem jedną tylko jedną kolumnę a tabela była chyba średnich rozmiarów. Nie pamiętam dokładnie... jakieś kilkaset rekordów.
DeyV
według moich testów, przynajmniej na najprostrzych zapytaniach, operujących na kolumnie tekstowej, DISTINCT jest minimalnie szybsze od GROUP BY (co zresztą również wydaje mi się naturalne, gdzyż takie właśnie jest jego przeznaczenie)
FiDO
Zrobilem test na tabeli z okolo 40 tys. rekordow, unikalnych jest troche ponad 300. DISTINCT byl _znacznie_ szybszy (ok 0.0008 wzgledem 0.1xxx dla GROUP BY), jednak jest jedno "ale". Wynik zwrocony przy pomocy DISTINCT nie jest posortowany, za to ten z GROUP BY jest. Gdy wiec dodamy do DISTINCT'a sortowanie, aby otrzymac te same wyniki (w tej samej kolejnosci), czasy bardzo zblizaja sie do siebie (co znaczy, ze wiekszosc tego zapytania to jest wlasnie sortowanie), a roznica jest dopiero na trzecim miejscu po przecinku.
Jojo
Dzięki wielkie za rozwianie moich wątpliwości. Widzę, że to co działo się wtedy u mnie było jakimś dziwnym zbiegiem okoliczności nie posiadającym logicznego wytłumaczenia. smile.gif
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.