Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mysql] optymalizacja zapytania
lenczewski
post 24.05.2006, 19:36:49
Post #1





Grupa: Zarejestrowani
Postów: 159
Pomógł: 1
Dołączył: 31.08.2005

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


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ć?


--------------------
Go to the top of the page
+Quote Post
dr_bonzo
post 24.05.2006, 19:43:14
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


  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


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
lenczewski
post 24.05.2006, 19:57:14
Post #3





Grupa: Zarejestrowani
Postów: 159
Pomógł: 1
Dołączył: 31.08.2005

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


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.

Ten post edytował lenzcewski 24.05.2006, 19:57:50


--------------------
Go to the top of the page
+Quote Post
akubiczek
post 28.05.2006, 09:57:15
Post #4





Grupa: Zarejestrowani
Postów: 189
Pomógł: 0
Dołączył: 4.07.2004
Skąd: z neostrady

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


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.
Go to the top of the page
+Quote Post
bendi
post 28.05.2006, 11:40:40
Post #5





Grupa: Zarejestrowani
Postów: 401
Pomógł: 5
Dołączył: 14.09.2003
Skąd: Wrocław

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


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.


--------------------
Go to the top of the page
+Quote Post
mike
post 28.05.2006, 11:46:44
Post #6





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


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?
Go to the top of the page
+Quote Post
bendi
post 28.05.2006, 12:06:27
Post #7





Grupa: Zarejestrowani
Postów: 401
Pomógł: 5
Dołączył: 14.09.2003
Skąd: Wrocław

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


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


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 24.06.2025 - 16:48