abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 23:22 | IT novinky

    Evropský parlament dnes přijal směrnici týkající se tzv. práva spotřebitele na opravu. Poslanci ji podpořili 584 hlasy (3 bylo proti a 14 se zdrželo hlasování). Směrnice ujasňuje povinnosti výrobců opravovat zboží a motivovat spotřebitele k tomu, aby si výrobky nechávali opravit a prodloužili tak jejich životnost.

    Ladislav Hagara | Komentářů: 1
    včera 16:11 | Nová verze

    Bylo oznámeno (cs) vydání Fedora Linuxu 40. Přehled novinek ve Fedora Workstation 40 a Fedora KDE 40 na stránkách Fedora Magazinu. Současně byl oznámen notebook Slimbook Fedora 2.

    Ladislav Hagara | Komentářů: 4
    včera 13:44 | Upozornění

    ČTK (Česká tisková kancelář) upozorňuje (X), že na jejím zpravodajském webu České noviny byly dnes dopoledne neznámým útočníkem umístěny dva smyšlené texty, které nepocházejí z její produkce. Jde o text s titulkem „BIS zabránila pokusu o atentát na nově zvoleného slovenského prezidenta Petra Pelligriniho“ a o údajné mimořádné prohlášení ministra Lipavského k témuž. Tyto dezinformace byly útočníky zveřejněny i s příslušnými notifikacemi v mobilní aplikaci Českých novin. ČTK ve svém zpravodajském servisu žádnou informaci v tomto znění nevydala.

    Ladislav Hagara | Komentářů: 15
    včera 13:33 | Komunita

    Byla založena nadace Open Home Foundation zastřešující více než 240 projektů, standardů, ovladačů a knihoven (Home Assistant, ESPHome, Zigpy, Piper, Improv Wi-Fi, Wyoming, …) pro otevřenou chytrou domácnost s důrazem na soukromí, možnost výběru a udržitelnost.

    Ladislav Hagara | Komentářů: 0
    včera 13:00 | Nová verze

    Společnost Meta otevírá svůj operační systém Meta Horizon OS pro headsety pro virtuální a rozšířenou realitu. Vedle Meta Quest se bude používat i v připravovaných headsetech od Asusu a Lenova.

    Ladislav Hagara | Komentářů: 0
    včera 04:33 | IT novinky

    Společnost Espressif (ESP8266, ESP32, …) získala většinový podíl ve společnosti M5Stack, čímž posiluje ekosystém AIoT.

    Ladislav Hagara | Komentářů: 0
    22.4. 23:44 | Nová verze

    Byla vydána nová stabilní verze 3.5 svobodného multiplatformního softwaru pro editování a nahrávání zvukových souborů Audacity (Wikipedie). Přehled novinek také na YouTube. Nově lze využívat cloud (audio.com). Ke stažení je oficiální AppImage. Zatím starší verze Audacity lze instalovat také z Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    22.4. 16:44 | Zajímavý článek

    50 let operačního systému CP/M, článek na webu Computer History Museum věnovaný operačnímu systému CP/M. Gary Kildall z Digital Research jej vytvořil v roce 1974.

    Ladislav Hagara | Komentářů: 2
    22.4. 16:22 | Pozvánky

    Byl zveřejněn program a spuštěna registrace na letošní konferenci Prague PostgreSQL Developer Day, která se koná 4. a 5. června. Na programu jsou 4 workshopy a 8 přednášek na různá témata o PostgreSQL, od konfigurace a zálohování po využití pro AI a vector search. Stejně jako v předchozích letech se konference koná v prostorách FIT ČVUT v Praze.

    TomasVondra | Komentářů: 0
    22.4. 03:00 | IT novinky

    Po 48 letech Zilog končí s výrobou 8bitového mikroprocesoru Zilog Z80 (Z84C00 Z80). Mikroprocesor byl uveden na trh v červenci 1976. Poslední objednávky jsou přijímány do 14. června [pdf].

    Ladislav Hagara | Komentářů: 6
    KDE Plasma 6
     (72%)
     (10%)
     (2%)
     (17%)
    Celkem 697 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Dotaz: jak odfiltrovat radky se stejnou hodnotou

    23.11.2009 07:08 Leoš Literák | skóre: 74 | blog: LL | Praha
    jak odfiltrovat radky se stejnou hodnotou
    Přečteno: 1548×
    Na abicku se muze zobrazovat vice prispevku od jednoho uzivatele, coz obcas vede k tapetovani. Potrebuju tedy upravit SQL prikaz, aby vracel jen jeden zapisek od uzivatele a dalsi, prestoze by jinak do vyberu patrily, ignoroval a nacetl misto nich jine.

    Aktualne ma dotaz tuto strukturu (db schema):
    SELECT R.cislo FROM polozka P, relace R, spolecne S WHERE
    P.typ=12 and P.cislo=R.potomek and typ_potomka='P' and S.typ='P' and S.cislo=R.potomek AND S.vytvoreno<=now() 
    ORDER BY S.vytvoreno DESC LIMIT 0,15
    Naivne jsem pridal do selectu sloupecek S.pridal, ktery obsahuje id autora, a doplnil GROUP by S.pridal, coz zafungovalo, ale seznam nebyl setrizen podle casu. Klauzule DISTINCT take nema zadny efekt, protoze id relace je vzdy unikatni. Tim jsem uvizl a nez to zacnu resit v jave, poradim se s vami, zda na neco neprijdete.
    Zakladatel tohoto portálu. Twitter, LinkedIn, blog, StackOverflow

    Odpovědi

    23.11.2009 09:03 kulik
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Slo by to napriklad pomoci not exists, je to v tomto pripade logictejsi nez group by, kdyz nic negaregujes. Ciste prakticky bych to resil az v te jave, uz jen kvuli jednodussi konfigurovatelnoti (bude to ruzne pro ruzne sekce stranek, "zahozene" budou jen skryte a pujde je na vyzadani zobrazit, ...).
    23.11.2009 09:21 Leoš Literák | skóre: 74 | blog: LL | Praha
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Mohl bys prosim poslat ukazku s not exists?

    Jinak v jave se mi do toho nechce, protoze bych musel tahat vyrazne vice dat jako pojistku, ze tam zbude dostatek polozek po odstraneni tech, ktere tam nepatri. Data jsou pro homepage a konfigurovatelnost tam zatim neplanuju. I kdyz mozna po nasazeni si ji ctenari vyzadaji.
    Zakladatel tohoto portálu. Twitter, LinkedIn, blog, StackOverflow
    23.11.2009 09:34 kulik
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Zhruba neco takoveho, pokud tedy spravne chapu, ze chces nejnovejsi prispevek:
    with polozky as (
    SELECT R.cislo, s.vytvoreno, s.pridal
      FROM polozka P, relace R, spolecne S 
      WHERE P.typ=12 
        and P.cislo=R.potomek 
        and typ_potomka='P' 
        and S.typ='P' 
        and S.cislo=R.potomek 
        AND S.vytvoreno<=now()
    )
    select *
      from polozky xx
      where not exists ( select 0
                           from polozky
                           where pridal = xx.pridal
                             and vytvoreno > xx.vytvoreno )
    
    Te javy bych se zas tak moc nebal, jestlize ted tahas 15, muzes tahat rekneme 30 a pokud by to nestacilo, dotahnout si dalsi - je to samozrejme pomalejsi, ale predpokladam, ze v 99% pripadu by se vystacilo s jednim dotazem.
    23.11.2009 16:12 neaktivni | skóre: 24 | blog: neaktivni
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Resil bych to pres INNER JOIN asi takto:
    ... AS a INNER JOIN
    (SELECT MAX(vytvoreno) AS vytvoreno, pridal FROM spolecne) AS b
    ON (a.vytvoreno = b.vytvoreno AND a.pridal = b.pridal)
    23.11.2009 19:21 Leoš Literák | skóre: 74 | blog: LL | Praha
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Zkusím to, díky. Snad to zvládnu dá dohromady. Jako další riziko vidím MySql verze 5.1, snad to podporuje.
    Zakladatel tohoto portálu. Twitter, LinkedIn, blog, StackOverflow
    23.11.2009 22:40 kuka
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Nezkoumal jsem ten datovy model, ale nemuze vadit, ze se na "b" aplikuji jine podminky nez na "a"?
    23.11.2009 23:43 Leoš Literák | skóre: 74 | blog: LL | Praha
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Muze mi nekdo vysvetlit, co je mineno tim "AS a", resp. kam to do SQL prikazu patri? Ma to byt nove pojmenovani tabulky S? Lepsi by byl kompletni prikaz. Dik
    Zakladatel tohoto portálu. Twitter, LinkedIn, blog, StackOverflow
    24.11.2009 08:42 kuka
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Ja jsem to pochopil tak, ze "a" je ten tvuj puvodni dotaz (bez trideni a limitu). Myslim ze kompletni kod by nemel byt potreba, jde o jednoduchy postup "hledam radky splnujici me podminky takove, ze jsou zaroven mezi radky s touto vlastnosti posledni za cloveka". To se da bud tak ze si zjistim konkretni cas posledniho (ale mel bych to delat na stejne mnozine dat) a podle nej to pak spojim (cimz starsi radky vypadnou, protoze nematchuji ten posledni cas), nebo tak, ze doplnuju podminku, ze zadny novejsi v mnozine neexistuje. V obou pripadech tam ve vysledku budu mit velmi podobne dotazy dvakrat (prispevek vyse pouzivajici not exists pouziva pro zkraceni konstrukci with, ktera mozna v mysql neni, ale lze to proste trivialne rozepsat do dvou stejnych dotazu na mistech, kde je pouzity ten alias). V cistem SQL podle mne jiny zpusob neni, nejde tam "primo" pracovat s konkretnimi radky z grupovane skupiny) Treba v Oracle na to postupy jsou, lze si vyzadat prvni ze skupiny, predchazejici ve skupine apod., ale to afaik nejsou standardne podporovane veci v SQL.
    24.11.2009 09:45 neaktivni | skóre: 24 | blog: neaktivni
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Jasne, byl to jen hint. Kompletne by to muselo byt nejak takto (nemam moznost testovat, ale melo by to snad priblizne stacit):
    SELECT R.cislo
    FROM 
      polozka P
    INNER JOIN
      relace R
    ON (P.typ=12 and P.cislo=R.potomek and typ_potomka='P')
    INNER JOIN
      spolecne S
    ON (S.typ='P' and S.cislo=R.potomek AND S.vytvoreno<=now())
    INNER JOIN
    (
        SELECT MAX(vytvoreno) AS vytvoreno, pridal FROM spolecne
        WHERE S.typ = 'P' AND S.vytvoreno<=now() 
        GROUP BY pridal) AS U
    ON (S.vytvoreno = U.vytvoreno AND S.pridal = U.pridal AND S.cislo = U.cislo))
    ORDER BY S.vytvoreno DESC LIMIT 0,15
    Nejak takto by to melo fungovat, inner joiny jsou v podstate identicke s puvodnim pouzitim where, akorat mi prijdou prehlednejsi. Mozna tam je nejaka chyba a nejspis by to bylo dobre nejak zoptimalizovat. No, uvidite.
    24.11.2009 10:49 Leoš Literák | skóre: 74 | blog: LL | Praha
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Ted nemam cas to ladit, takze jsem to zkusil jen spustit:

    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') ORDER BY S.vytvoreno

    Vice si pohraju vecer
    Zakladatel tohoto portálu. Twitter, LinkedIn, blog, StackOverflow
    24.11.2009 11:11 neaktivni | skóre: 24 | blog: neaktivni
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    jejej, nechal jsem tam zavorku navic
    24.11.2009 11:49 Leoš Literák | skóre: 74 | blog: LL | Praha
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Dik, mel jsem podezreni, ale v tech zavorkach jsem se ztratil. Ted jsme v inner joinu:
    ERROR 1054 (42S22): Unknown column 'S.typ' in 'where clause'
    coz resi odstraneni prefixu S. Pak to ale skonci na to, ze tabulka U nema sloupecek cislo: Unknown column 'U.cislo' in 'on clause'
    Zakladatel tohoto portálu. Twitter, LinkedIn, blog, StackOverflow
    24.11.2009 12:18 neaktivni | skóre: 24 | blog: neaktivni
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    ja sem tele, tech chyb. kazdopadne, to vsechno je asi jinak. co je cislo? plati ze vyssi cislo znamena novejsi zaznam daneho typu? pokud ano, pak by to melo byt pro zachovani jedinecnosti
    SELECT R.cislo
    FROM 
      polozka P
    INNER JOIN
      relace R
    ON (P.typ=12 and P.cislo=R.potomek and typ_potomka='P')
    INNER JOIN
      spolecne S
    ON (S.typ='P' and S.cislo=R.potomek AND S.vytvoreno<=now())
    INNER JOIN
    (
        SELECT MAX(cislo) AS cislo, pridal FROM spolecne
        WHERE typ = 'P' AND vytvoreno >= now()
        GROUP BY pridal ) AS U
    ON (S.pridal = U.pridal AND S.cislo = U.cislo)
    ORDER BY S.vytvoreno DESC LIMIT 0,15
    
    To vrati od kazdeho uzivatele vzdy pouze zaznamy s nejvyssim cislem typu 'P'. Pokud cislo neni nejvyssi u nejnovejsiho zaznamu daneho typu (i kdyz asi je, kdyz je cislo + typ unikatni), pak se to musi hnat pres vytvoreno, ale to je hloupe, protoze nevim, zda je zajistena jedinecnost. v kazdem pripade takto:
    SELECT R.cislo
    FROM 
      polozka P
    INNER JOIN
      relace R
    ON (P.typ=12 and P.cislo=R.potomek and typ_potomka='P')
    INNER JOIN
      spolecne S
    ON (S.typ='P' and S.cislo=R.potomek AND S.vytvoreno<=now())
    INNER JOIN
    (
        SELECT MAX(vytvoreno) AS vytvoreno, pridal FROM spolecne
        WHERE typ = 'P' AND vytvoreno >= now()
        GROUP BY pridal ) AS U
    ON (S.pridal = U.pridal AND S.vytvoreno = U.vytvoreno)
    ORDER BY S.vytvoreno DESC LIMIT 0,15
    
    24.11.2009 14:07 Leoš Literák | skóre: 74 | blog: LL | Praha
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Neplati, dulezitejsi je S.vytvoreno. Blogy je totiz mozne schedulovat / odkladat, takze treba zapisek vytvoris v lednu, ale publikujes jej az v unoru. Zapisky z konce ledna budou tedy starsi, prestoze maji vyssi id.
    Zakladatel tohoto portálu. Twitter, LinkedIn, blog, StackOverflow
    24.11.2009 14:12 Leoš Literák | skóre: 74 | blog: LL | Praha
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Druhy prikaz nevrati zadna data.
    Zakladatel tohoto portálu. Twitter, LinkedIn, blog, StackOverflow
    24.11.2009 15:37 neaktivni | skóre: 24 | blog: neaktivni
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Mozna to bdue tim, ze jsem tam dopsal blbe tu casovou podminku >= misto <= . Zkuste to zmenit.
    24.11.2009 15:37 neaktivni | skóre: 24 | blog: neaktivni
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Teda chci rict ze to je urcite spatne. Je treba to zmenit, ale co bude potom, to tezko rict ;-)
    24.11.2009 22:08 Leoš Literák | skóre: 74 | blog: LL | Praha
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Tak uz mame vysledek: 52 sekund na prvni spusteni, neco pres sekundu na dalsi spusteni. Porovnani vysledku pred a po ukazuje nespravnost dotazu, ocekaval jsem odstraneni 13. radku, misto toho je mnozina vysledku zmenena na vetsine pozic. Nevidim v datech logiku, jak je vybira. Dekuju za pomoc, zkusim to v jave.
    Zakladatel tohoto portálu. Twitter, LinkedIn, blog, StackOverflow
    25.11.2009 13:38 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    otázka: kedy sa jedná o tapetovanie? chceš odstrániť všetky rovnaké príspevky jednoho autora alebo viacerých ? v sekvencii za sebou alebo každý deň ?
    25.11.2009 20:08 Leoš Literák | skóre: 74 | blog: LL | Praha
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Z duvodu jednoduchosti bude platit jeden zapisek od uzivatele. Nicmene mam schizu, byl jsem presvedcen, ze jsem to uz mel nasazeno, ale nakoukanim do svn jsem tuto funkcnost nenasel.
    Zakladatel tohoto portálu. Twitter, LinkedIn, blog, StackOverflow
    26.11.2009 12:01 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    vytiahni si všetky texty od separátnej tabuľky, pridaj k nim hash, napr: sha1 (join ('-', userid, text)). v tejto tabuľke eviduj id prvého/posledného príspevku a v tabuľke s príspevkami nahraď text referenciou do tejto tabuľky a výskyt kontroluj podmienkou. "id = id".

    hash môžeš upraviť podľa potreby, takisto prvý/posledný príspevok môžeš vytiahnuť do ďalšej tabuľky.
    24.11.2009 10:35 FooBar
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Jaky databazovy server? Jsem pred prvnim kafem a zadani jsem jenom prolitnul, ale prijde mi, ze presne to co hledas je nejaky tvuj lokalni ekvivalent DISTINCT ON (expression), http://www.postgresql.org/docs/current/interactive/sql-select.html
    24.11.2009 10:38 Leoš Literák | skóre: 74 | blog: LL | Praha
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Zakladatel tohoto portálu. Twitter, LinkedIn, blog, StackOverflow
    1.12.2009 21:40 kvutza | skóre: 2
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Přijde mi, že obdobný problém je svižně řešen pro PostgreSQL na "Last order for each" pomocí DISTINCT ON a rozepsané složitěji pro těžkopádnější systémy na "Last order for each" pro MySQL, ...
    2.12.2009 11:22 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Píšu, protože nechápu proč GROUP BY a následné ORDER BY by měl vracet kolekci jinak setříděnou.
    Protože se mi špatně čte spojování tabulek bez JOINu, tak sem si to přepsal (snad dobře).
    Toto by mělo vrátit to co před tím, ale jen po jednom příspěvku od S.Pridal.
    SELECT S.pridal,MAX(R.cislo) AS cisloPosledni,MIN(R.cislo) AS cisloPrvni FROM relace AS R
      INNER JOIN polozka  AS P ON R.typ_potomka='P' AND P.typ=12 AND P.cislo=R.potomek
      INNER JOIN spolecne AS S ON S.cislo=R.potomek AND S.typ='P' AND S.vytvoreno<=now()
       GROUP BY S.pridal ORDER BY S.vytvoreno DESC LIMIT 0,15
    
    Což by mohlo být původní
    SELECT S.pridal,MAX(R.cislo) AS cisloPosledni,MIN(R.cislo) AS cisloPrvni FROM polozka P, relace R, spolecne S WHERE
    P.typ=12 and
    P.cislo=R.potomek and
    typ_potomka='P' and
    S.typ='P' and
    S.cislo=R.potomek AND
    S.vytvoreno<=now()
    GROUP BY S.pridal
      ORDER BY S.vytvoreno DESC LIMIT 0,15 
    
    Omlouvám se jestli mi něco uniklo a nepobral jsem to…
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    2.12.2009 12:39 kulik
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Bohuzel nerozumim k cemu prispevek smeruje. Dotaz vybira pro uzivatele minimalni a maximalni cislo relace. Jakou to ma souvislost s problemem posledniho prispevku uzivatele? Trideni podle S.vytvoreno by melo podle mne vyhodit chybu ve smyslu "not a group by expression", nicmene mysql nepouzivam, mozna to nejak zkousne (ale jak by to pak setridilo to fakt netusim).
    2.12.2009 12:56 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Sorry, nepobral jsem to, špatně jsem pochopil tabulku relace (i když je i pojmenována víc než výstižně).

    »Jsem si jist, že odpověď je správná, jen otázka byla položena chybně.« :)
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    2.12.2009 15:11 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Nicméně bych to rád pobral (ani nechci najít řešení, ale pochopit vo co go :) ), původní dotaz selectuje roj R.cislo, které odpovídají více zápiskům.
    (Neznám konkrétní využití, ale předpokládám, že původní dotaz je kompletní a je třeba vrátit to co je v něm napsáno).
    A požadavek byl je omezit 1× na uživatele definového S.pridal.
    A protože nevím jestli 1. nebo poslední příspěvek a protože záznamy v relace mají primární index jako autoincrement a je to pole cislo, tak jsem předpokládám, že nejvyšší cislo na daného uživatele je poslední záznam a nejnižší 1. záznam.
    Proto selectovací dotaz (pokud je správně) vybere tu množinu záznámů uvedenou v původním SQL dotazu a seskupí záznamy dle uživatele a ke každému záznamu vrátí cislo prvního a posledního záznamu relace.
    Kde jsem se dostal mimo zadání ? - dík
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    2.12.2009 16:05 kulik
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Co treba si precist celou diskusi:
    Neplati, dulezitejsi je S.vytvoreno. Blogy je totiz mozne schedulovat / odkladat, takze treba zapisek vytvoris v lednu, ale publikujes jej az v unoru. Zapisky z konce ledna budou tedy starsi, prestoze maji vyssi id.
    2.12.2009 17:45 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Chybný předpoklad :) - četl jsem celou diskuzi, ALE upjal jsem se na problém definovaný na začátku a tato informace mi nepřipadla důležitá, ale když jsem se zanořil je přímo fatální…

    Vzhledem k datovému modelu a zadání, bych volil jednoznačně aplikační řešení nebo řešení přes SQL fci.
    Nechat to jak je (SQL dotaz) nebo dotaz optimalizovat a projel to celé, s tím, že vypsat jen ty 1. záznamy (třeba přes pomocnou tabulku evidovaných S.pridal)

    S kolegou jsme zrobily tento výkonný fujtajbl,
    vracející jeden záznam R.cisla,
    pro každého uživatele S.pridal
    a to poslední dle S.vytvoreno (... teda doufám):
    SELECT Max(RR.cislo) as poslednicislo FROM
            (SELECT S.pridal, MAX(S.vytvoreno) AS maxvytvoreno FROM relace AS R
                    INNER JOIN polozka  AS P ON R.typ_potomka='P' AND P.typ=12 AND P.cislo=R.potomek
                    INNER JOIN spolecne AS S ON S.cislo=R.potomek AND S.typ='P' AND S.vytvoreno<=NOW()
                  GROUP BY S.pridal
                  ORDER BY Max(S.vytvoreno) DESC
            ) AS RPS
            INNER JOIN spolecne as SS ON SS.pridal = RPS.pridal AND SS.vytvoreno = RPS.maxvytvoreno
            INNER JOIN relace as RR ON RR.typ_potomka='P'AND RR.potomek=SS.cislo
                GROUP BY SS.pridal LIMIT 0,15
    
    POZOR: Pokud uživatel vložil více příspěvků v čase 1 sec. - smůla - budou tam všechny
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    2.12.2009 18:07 kulik
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Myslim ze problem byl uz vyresen, lepe receno SQL reseni v principu navrzeno (tazatel se to nakonec rozhodl udelat proceduralne, coz je podle mne rozumne). Order by klauzule ve vnorenem dotazu nema smysl, naopak chybi "na konci". Vzhledem ke grupovani dle ss.pridal je vylouceno, ze by mel jeden uzivatel ve vystupu vice zaznamu bez ohledu na to, kolik existuje zaznamu zadanych ve stejnem case (tzn. tve varovani pred timto je mylne). Pokud vubec bude tento dotaz fungovat, vybere posledni prispevky patnacti "nahodnych" uzivatelu, nikoliv poslednich patnact prispevku od ruznych uzivatelu.
    2.12.2009 18:31 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Ad. vyřešem
    není označeno jako vyřešen a zkusím nepovažuji za vyřešeno :)
    Ad. Pozor
    Ano máte pravdu, (poznámka byla k dotazu, který nebyl publikován)
    Ad. Order
    na konci order by být nemůže, neni v kolekci a ve vnořeném dotazu zajistí pořadí
    Ad. Pokud vubec bude tento dotaz fungovat
    No, to nemusí obvykle dotazy skládám nad daty a postupně. (SQL dělám řídce).
    Ad. nahodnych uzivatelu
    Hledím na to a nemyslím, můžete to zdůvodnit ?
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    3.12.2009 17:29 kulik
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Order by musi byt na konci, uvnitr postrada smysl a setrideni vysledku nezajisti - nevim jak to nejak formalne zduvodnit, je to elementarni vlastnost SQL. Pokud na konci "byt nemuze", musi se dotaz upravit tak aby ta m mohl byt.
    3.12.2009 21:44 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Chtěl jsem zdůvodnit náhodnost, ne třídění ... nicméně není již třeba (vrací to sice nenáhodný výsledek, ale špatný :))

    Poznámka k elementární "vlastnosti SQL", aby to někoho neuvedlo v omyl :):
    pod-dotaz obecně může ovlivňovat setřídění výsledku např. MySQL5 (mám pocit PostgreSQL od 7.1)
    SELECT column2
      FROM (SELECT column2,id FROM t1 ORDER BY column1 DESC) AS tt1
        INNER JOIN t2 ON tt1.id = t2.t1id_fk
     WHERE t2.column42 > 7
    
    Vrací výsledek tříděný dle column1, ale ve výsledku column1 není

    či ovlivnit výsledek samotný ... specifické M$SQL (pominu-li chybu historické verze):
    SELECT *
     FROM (SELECT TOP 3 FROM t1 ORDER BY column DESC) as tt1
     ORDER BY column ASC
    
    Vrací 3 poslední (dle column) záznamy z t1 setříděné dle column vzestupně
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    3.12.2009 06:43 Leoš Literák | skóre: 74 | blog: LL | Praha
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Diky za pokus, ale nevrati ani jeden radek z puvodniho vysledku. Ty relace jsou nejake nahodne, vetsina z nich je velmi starych.
    Zakladatel tohoto portálu. Twitter, LinkedIn, blog, StackOverflow
    3.12.2009 09:31 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Tý-jo, Praha a 6:43 :) (to porušuje pravidlo, do Brna volej po osmé do Prahy po deváté :) )
    Mně to vrátilo 0 záznamů, bo mám databázi prázdnou :)
    Takže předchozí příspěvek o náhodnosti nekeceal :(
    Abych si to ujasnil původní dotaz když se přepíše by vypadal takto:
    To by mělo vrátit stejnou skupinu jako původní dotaz (a možná rychleji) - je tak ?, nemám chybu již zde ?
    SELECT R.cislo FROM relace AS R
      INNER JOIN polozka  AS P ON R.typ_potomka='P' AND P.typ=12 AND P.cislo=R.potomek
      INNER JOIN spolecne AS S ON S.cislo=R.potomek AND S.typ='P' AND S.vytvoreno<=now()
         ORDER BY S.vytvoreno DESC LIMIT 0,15
    
    Pokud předcházející platí, chyba je (u mě) v následujícím ... kde ? :)
    Takto získaná kolekce hodnot R.cislo je třeba omezit tak, aby tam byl jen 1× záznam pro S.Pridal a kolekce byla stále setříděná dle S.vytvoreno
    Výsledkem filtrování jen na jeden záznam pro S.Pridal má být záznam s nejvyšším datem S.vytvoreno (ale S.vytvoreno je zároveň <=NOW()).
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    3.12.2009 13:53 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Poslední pokus (od kolegy):
    SELECT X.MaxCislo 
       FROM (SELECT Max(RR.cislo) as Maxcislo
          FROM ( SELECT S.pridal, Max(S.vytvoreno) as lastpublished
                  FROM relace AS R
                  INNER JOIN polozka  AS P ON R.typ_potomka='P' AND P.typ=12 AND P.cislo=R.potomek
                  INNER JOIN spolecne AS S ON S.cislo=R.potomek AND S.typ='P' AND S.vytvoreno<=now() GROUP BY S.pridal
                ) as F
                INNER JOIN spolecne AS SS ON SS.typ='P' AND SS.vytvoreno<=now() AND SS.pridal = F.pridal AND SS.vytvoreno = F.lastpublished
                INNER JOIN relace AS RR ON RR.typ_potomka = 'P' AND RR.potomek = SS.cislo
                INNER JOIN polozka AS PP ON PP.typ=12 AND PP.cislo=RR.potomek
                  GROUP BY F.pridal
            ) AS X
        INNER JOIN relace RRR ON X.Maxcislo = RRR.cislo
        INNER JOIN spolecne as SSS ON RRR.potomek = SSS.cislo AND SSS.typ = 'P'
      ORDER BY SSS.vytvoreno DESC LIMIT 0,15
    
    Tímto končím :)
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    4.12.2009 15:58 fanda
    Rozbalit Rozbalit vše Re: jak odfiltrovat radky se stejnou hodnotou
    Zkusím také nějaký návrh, ale jen teoreticky.

    Pokud potřebuješ unikátní pridal, vyšel bych z tabulky autorů (tu tam nemáš uvedenou, ale předpokládám, že existuje), kde je právě každý autor jen jednou.

    A ke každému autorovi bych pomocí vnořeného selectu dotáh jeho nejnovější záznam vyhovující podmínkám. Tedy vpodstatě tvůj select z původního dotazu ofiltrovaný navíc na pridal=autor, seřazený dle vytvoreno sestupne a limit 1

    Tento výsledek bych seřadil dle vytvoreno sestupne s limitem 15.

    Z hlavy nedám teď SQL dohromady, já to zas tak často nepoužívám a nemám syntaxi v hlavě.

    Jen nástin: SELECT a.autor, (SELECT cislo, vytvoreno WHERE ...... S.pridal=A.autor ORDER BY vytvoreno DESC LIMIT 1) ORDER BY vytvoreno DESC LIMIT 15

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.