Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Łączenie tabel, max i group by
wlamywacz
post
Post #1





Grupa: Zarejestrowani
Postów: 535
Pomógł: 27
Dołączył: 3.05.2005

Ostrzeżenie: (20%)
X----


Witam

Posiadam tabele (params) w której składuje parametry stron.
  1. CREATE TABLE IF NOT EXISTS `params` (
  2. `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `pageid` int(10) UNSIGNED NOT NULL,
  4. `date` date NOT NULL,
  5. `value` bigint(20) NOT NULL,
  6. `type` int(10) UNSIGNED NOT NULL COMMENT '0-gsite,1-pr,2-ylinks,3-ylinksdomain',
  7. PRIMARY KEY (`id`),
  8. UNIQUE KEY `pageid` (`pageid`,`date`,`type`)
  9. ) ENGINE=InnoDB;

Każdej stronie może odpowiadać żaden lub jeden rekord. Tabela ze stronami:
  1. CREATE TABLE IF NOT EXISTS `pages` (
  2. `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `url` varchar(255) collate utf8_polish_ci NOT NULL,
  4. `update` datetime NOT NULL,
  5. PRIMARY KEY (`id`)
  6. ) ENGINE=InnoDB ;

Cały problem polega na tym aby wyświetlić dane z tabeli pages i dołączyć wartość ostatniego (najmłodszego) rekordu z tabeli params i wyświetlić jego wartość sortując po pages.update oraz warunku złączenia
  1. pages.id = params.pageid AND params.type = 0

Próbowałem już sposobów z MAX() oraz GROPU BY jednak zawsze otrzymywałem totalne bzdury. W tabeli params będzie kilkaset k rekordów więc trzeba mieć na uwadze szybkość działania.

Z góry dziękuje za pomoc
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Może coś takiego:
  1. SELECT pag.id, pag.url, pag.UPDATE, par.id, par.pageid, par.date, par.value, par.type FROM pages pag LEFT JOIN (SELECT * FROM params p1 WHERE p1.type = 0 AND date = (SELECT MAX(date) FROM params p2 WHERE p2.pageid = p1.pageid)) AS par ON par.pageid = pag.id;

Nie wiem, czy jest to optymalne rozwiązanie, ale dodatkowo zindeksował bym kolumnę date w tabeli params.
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 Aktualny czas: 20.08.2025 - 18:25