Web pro horních 10 000 www.koncier.cz
Zobrazují se odpovědi 1 až 5 z 5

Výběr x záznamů z každé skupiny

  1. Zdravím.
    Mám tabulku `zpravy`, která má pole id, titulek, obsah, cas_pridani, kategorie. Pole `kategorie` nabývá několika málo hodnot jako: domácí, zahraniční, ekonomika, sport, počasí...
    Tabulku mám naplněnou zprávami, tak, jak přišly.
    Potřebuju dotaz, který zobrazí 5 záznamů postupně od každého typu, ty (v rámci kategorie) seřazené podle času přidání.
    Mám už fungující řešení, které používá poddotazy, jež spojuje přes UNION.
    Kód:
    (SELECT titulek, obsah FROM zpravy WHERE kategorie="..." ORDER BY cas_pridani DESC LIMIT 5) UNION (SELECT ... atd)
    Existuje lepší řešení - bez poddotazů, bez explicitního vyjmenovávání kategorií?
    Díky

  2. Co se právě děje na Webtrhu?
  3. Pokud už ti to funguje s UNION a nebudou přibývat kategorie, tak bych to tak nechal. :)

    Šlo by to řešit i:
    a) pomocnou proměnnou

    b) s PARTITION BY nějak takhle:
    SELECT rs.titulek,rs.obsah
    FROM (
    SELECT titulek,obsah, Rank()
    over (Partition BY kategorie
    ORDER BY cas_pridani DESC ) AS Rank
    FROM table
    ) rs WHERE Rank <= 5

  4. Citace Původně odeslal Marek Heřman Zobrazit příspěvek
    Pokud už ti to funguje s UNION a nebudou přibývat kategorie, tak bych to tak nechal.
    Ptal jsem se, jestli existuje lepší řešení - ve smyslu rychlosti, náročnosti na DBMS, optimalizace...
    (Podotázka k tomuto - je vhodné mít dva indexy - kategorie a cas_pridani - nebo jeden kombinovaný (kategorie, cas_pridani)?)

    Citace Původně odeslal Marek Heřman Zobrazit příspěvek
    b) s PARTITION BY nějak takhle:
    Kód:
    Error (1064): Syntax error near '(Partition BY kategorie ORDER BY cas_pridani DESC) AS Rank FROM zpravy) rs'
    Mám MySQL/MariaDB verzi 5.5.5-10.1.21 pod Win32. Musím tabulku (je v enginu InnoDB) před tím nějak rozdělit, popř. jak?
    Díky.

  5. Narazil jsem na dotaz, ze kterého mi jde hlava kolem a budu nad ním muset ještě přemýšlet. Ale funguje! :)
    sql - Select top 10 records for each category - Stack Overflow
    Kód:
    SELECT z.*
    FROM zpravy AS z
    LEFT JOIN zpravy AS z1
      ON z.id = z1.id
      AND z.cas_pridani <= z1.cas_pridani
    GROUP BY z.id
    HAVING COUNT(*) <= 5
    ORDER BY kategorie ASC, cas_pridani DESC

  6. Citace Původně odeslal Martin Schlemmer Zobrazit příspěvek
    Narazil jsem na dotaz, ze kterého mi jde hlava kolem a budu nad ním muset ještě přemýšlet. Ale funguje! :)
    Velmi zajímavé! Zkusil jsem to, ale omezení na 5 záznamů mi nefunguje :(

Hostujeme u Server powered by TELE3