Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Połączenie tabel JOIN SELECT
Forum PHP.pl > Forum > Bazy danych > MySQL
nowyyy31
Mam problem z połączeniem tabel.

  1. CREATE TABLE IF NOT EXISTS `linki` (
  2. `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `grupyid` int(10) UNSIGNED NOT NULL,
  4. `url` varchar(255) NOT NULL,
  5. `data_pobrania` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  6. PRIMARY KEY (`id`)
  7. ) ENGINE=MyISAM DEFAULT CHARSET=latin2 ;

+---+-+------------------+--------------------------+
|120|1|www.link1.pl |2012-06-01 00:00:00 |
|121|1|www.link2.pl |2012-04-01 00:00:00 |
|122|1|www.link3.pl |2012-03-01 00:00:00 |
|123|2|www.linkowy1.pl|2012-06-01 00:00:00 |
|124|2|www.linkowy3.pl|2012-04-01 00:00:00 |
|125|2|www.linkowy2.pl|2012-03-01 00:00:00 |
+---+-+------------------+--------------------------+
  1. CREATE TABLE IF NOT EXISTS `grupy_link` (
  2. `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `tytul` varchar(255) NOT NULL,
  4. `title` text NOT NULL,
  5. `pobrano` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  6. `aktywny` enum('yes','no') NOT NULL DEFAULT 'yes',
  7. PRIMARY KEY (`id`)
  8. ) ENGINE=MyISAM DEFAULT CHARSET=latin2

+---+-+------------------+--------------------------+----+
|215|1|Tytuł grupy 1 |2012-06-01 00:00:00 |yes |
|216|2|Tytuł grupy 2 |2012-04-01 00:00:00 |yes |
|217|2|Tytuł grupy 3 |2012-03-01 00:00:00 |no |
+---+-+------------------+--------------------------+----+
  1. SELECT grupy.title, linki.url
  2. FROM
  3. linki
  4. LEFT JOIN (SELECT id, title FROM grupy_link WHERE aktywny='yes' ORDER BY pobrano ASC) grupy ON grupy.id=linki.grupyid ORDER BY data_pobrania ASC


I chce pobrać najpierw z `grupy_link` najstarszą datę(pobrano) i następnie do tej grupy dobrać jednego linka dla tej grupy.

+-------tytul-----+------url--------------+-------pobrano----------+--data_pobrania------+
|Tytuł grupy id 2|www.linkowy2.pl | 2012-04-01 00:00:00 | 2012-03-01 00:00:00|
|Tytuł grupy id 1|www.link3.pl |2012-06-01 00:00:00 | 2012-03-01 00:00:00|
+-----------------+------------------------+-------------------------+-------------------------+
bpskiba
  1. SELECT *
  2. FROM grupy_link
  3. JOIN linki ON linki.grupyid=grupy_link.id
  4. ORDER BY pobrano
  5. LIMIT 1
nowyyy31
Nie do końca o to mi chodzi, nie chcę żeby mi się powtarzały "grupy_link.id", i chcę przynajmniej LIMIT 2
mmmmmmm
  1. SELECT grupy.*, linki.url, linki.data_pobrania FROM (SELECT id, title, min(pobrano) pobrano FROM grupy_link WHERE aktywny='yes' GROUP BY 1,2) grupy JOIN linki ON linki.grupyid=grupy.id JOIN (SELECT grupyid, min(data_pobrania) data_pobrania FROM linki GROUP BY 1) x ON x.grupyid=linki.grupyid AND x.data_pobrania=linki.data_pobrania
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.