Autor Zpráva
Majkld
Profil *
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
Inspiruj se zde
Některé časteji řešené dotazy pro MySQL - FAQ » Nalezení posledních pěti článků z každé kategorie
Majkld
Profil *
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 *
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
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

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0