Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] optymalizacja zapytania
Forum PHP.pl > Forum > Bazy danych > MySQL
lenczewski
witam mam taką tabelę
  1. CREATE TABLE `urls` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `user` varchar(222) NOT NULL DEFAULT '',
  4. `data` date NOT NULL DEFAULT '0000-00-00',
  5. UNIQUE KEY `id` (`id`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=latin2 AUTO_INCREMENT=1 ;

chciałbym pogrupować to w takiej formie:
Kod
data1
  user1
  user2
  user1
data2
  user4
  user1

W jaknajmniejszej ilości zapytań do bazy. W tej chwili mam poprostu najpierw zapytanie ze zgrupowanymi datami, następnie w pętli pobieram uzytkowników. da się to przyspieszyć?
dr_bonzo
  1. UNIQUE KEY `id` (`id`)

ID powinno byc PRIMARY KEY, no chyba ze tutaj oznacza cos innego.

podstawy:
  1. SELECT DATA, user FROM urls ORDER BY DATA ASC, user ASC
lenczewski
hmmm... teraz wlasnie zrozumialem jaka głupote chciałem zrobić. chałem najpierw zgrupować daty nastepnie wyswietlić jaci uzytkownicy logowali sie tego dnia, czyli najpierw
  1. SELECT * FROM urls GROUP BY DATA ORDER BY DATA ASC
, a pozniej w petli pobierałem userów, ale problem polega przy np. 30 dniach (mam wtedy 31 zapytan winksmiley.jpg
myslalem, że mozna to np. jakimś jednym zapytaniem.
akubiczek
Cytat(lenzcewski @ 24.05.2006, 20:57 ) *
hmmm... teraz wlasnie zrozumialem jaka głupote chciałem zrobić.


Czemu głupotę?

BTW możesz rozwiązać to w trochę inny sposób (jeżeli MySQL 4.1+):

  1. SELECT DATA , GROUP_CONCAT( DISTINCT user ORDER BY user )
  2. FROM urls


Wszystko w jednym zapytaniu, tylko użytkowników masz w jednym wierszu, a nie osobnych.
bendi
Cytat(dr_bonzo @ 24.05.2006, 20:43 ) *
  1. UNIQUE KEY `id` (`id`)

ID powinno byc PRIMARY KEY, no chyba ze tutaj oznacza cos innego.

Mała uwaga UNIQUE KEY i PRIMARY KEY różnią się tylko tym, że dopuszcza możliwość wystąpienia NULL'a jako wartości. Natomiast przypadku tabeli lenczewskiego akurat kolumna id ma ustawione NOT NULL, więc działanie będzie identyczne, jeszcze tylko by się przydało ustawić UNSIGNED coby rozszerzyć zakres a jednocześnie uniemożliwić wstawienie liczby ujemnej.
mike
Cytat(bendi @ 28.05.2006, 12:40 ) *
Mała uwaga UNIQUE KEY i PRIMARY KEY różnią się tylko tym, że dopuszcza możliwość wystąpienia NULL'a jako wartości.

Oj chyba nie tylko.

Widziałeś kidyś klika kluczy PRIMARY?
bendi
Cytat(mike_mech @ 28.05.2006, 12:46 ) *
Oj chyba nie tylko.

Widziałeś kidyś klika kluczy PRIMARY?

Fakt - prmiary może być tylko jeden, bo ma automatycznie przdzielaną taką też nazwę w związku z tym może być TYLKO jeden.
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.