Autor | Zpráva | ||
---|---|---|---|
Majkld Profil * |
#1 · Zasláno: 4. 4. 2013, 13:33:48 · Upravil/a: Majkld
Zdravím,
mám tabulku, ve které mám sloupce: id, nadpis, kategorie, text A rád bych vypsal pod sebe z každé kategorie 1 článek (poslední, dle data). Napadlo mě toto řešení, ale určitě to půjde lehčím dotazem: ( SELECT id, nadpis, kategorie, text FROM clanky WHERE kategorie = 1 ORDER BY datum DESC LIMIT 1 ) UNION ( SELECT id, nadpis, kategorie, text FROM clanky WHERE kategorie = 2 ORDER BY datum DESC LIMIT 1 ) UNION ( SELECT id, nadpis, kategorie, text FROM clanky WHERE kategorie = 3 ORDER BY datum DESC LIMIT 1 ) Mohu poprosit o radu, zda se dá tento dotaz upravit do lepšího zápisu? Děkuji za pomoc Ještě dodám, mám samozřejmě druhou tabulku kategorie, ve které mám sloupce: id, nazev |
||
Taps Profil |
#2 · Zasláno: 4. 4. 2013, 13:36:59
|
||
Majkld Profil * |
#3 · Zasláno: 4. 4. 2013, 13:48:20
Taps:
Super, díky, funguje tato možnost: select c.*, @n := @n * (@last_idk = c.kategorie) + 1 n, @last_idk := c.kategorie k from clanky c, (select @n := 0, @last_idk := '') t having n <= 1 order by c.kategorie, c.datum desc Akorát pokud chci teď tabulku spojit s tabulkou kategorie a to přidáním řádku: LEFT JOIN kategorie k ON k.id = c.kategorie Vypíše mi to chybovku: #1054 - Unknown column 'c.kategorie' in 'on clause' Mohu ještě tady poprosit o radu? Děkuji |
||
Majkld Profil * |
#4 · Zasláno: 4. 4. 2013, 14:48:24 · Upravil/a: Majkld
Vyřešeno:
select c.*, @n := @n * (@last_idk = c.kategorie) + 1 n, @last_idk := c.kategorie k, kat.nazev nazev_kategorie from clanky c, (select @n := 0, @last_idk := '') t, kategorie kat WHERE kat.id = c.kategorie having n <= 1 order by c.kategorie, c.datum desc Tak ještě jsem narazil na jeden problém, nedaří se mi dotaz upravit tak, aby z každé kategorie bral ten nejnovější článek dle data. Nevíte ještě jak na toto? Díky |
||
Majkl578 Profil |
Nespíš budeš nejdřív muset články seřadit a až poté nad nimi provést tuto operaci na výběr:
select c.*, @n := @n * (@last_idk = c.kategorie) + 1 n, @last_idk := c.kategorie k, kat.nazev nazev_kategorie from (select * from clanky order by c.kategorie, c.datum desc) c, (select @n := 0, @last_idk := '') t, kategorie kat WHERE kat.id = c.kategorie having n <= 1 |
||
Kajman Profil |
#6 · Zasláno: 4. 4. 2013, 15:16:33
Když se má vypsat jen jeden článek, použil bych
Některé časteji řešené dotazy pro MySQL - FAQ » Nalezení řádků s maximální (minimální) hodnotou |
||
Časová prodleva: 12 let
|
0