Registrace nového uživatele     Návod     Kluby     Archív  Lopuchu     Lopuch.cz  

Nudou jsi opuch?
Navštiv Lopuch!

Lopuch.cz

Jméno:
Heslo:
Podpora LCD:
 
Klub Database (mysql,...) [ŽP: neomezená] (kategorie Programování) moderuje melkor_unlimited.
Archiv
  Nastavení klubu     Nastavení práv     Homepage     Anketa     Přítomní     Oblíbené     Lopuch     Kategorie  
autor: 
text: 
vyplnit a 
Help
 Titulek, text příspěvku  
Opište pozpátku následující text bez prostředního znaku: zzoigdu
[ 1008 ] <Novější  <<<Nejnovější  Nejstarší>>>  Starší>  
themajkl themajkl All those moments will be lost in time - like tears in rain. 21.12.2010 22:27  1320
pepak [1318]: No tak ale to je blbě napsaný select, nebo aspoň špatně definované zadání. (Nemluvě o tom, že píšeš "vyhledávám autora", ale ten select hledá knihu (podle autora).) Takže ano, pokud chceš hledat podle něčeho jiného, než select vrací a chceš jen unikátní položky, je distinct dobré řešení.
knedle knedle online - Krabice živých 21.12.2010 22:24  1319
taky zalezi kolik toho vypisujes - reseni uz napsali ostatni

pridam jen, ze kdyz jsem to resil ja, ziskal id knihy (dle filtru)
a pomoci idknih jsem si vytahl do assoc tab vsechny prislusne autory

tj. 2 selecty, tri dotazy do db


drobne ot:

naposled jsem pouzil NotORM u teto struktury a s jeho pouzitim byl vystup velmi jednoduchy

jenze to bys musel mit strukturu db v urcitem tvaru (mozna to jde priohnout, ale ja ji tvoril primo pro toto db udelatko)
pepak pepak - Pepak.net 21.12.2010 22:14  1318
The Majkl: Protože se musíš podívat na reálné použití, ne na teoretické konstrukce. Obvykle nevyhledáváš jednoho konkrétního autora, ale všechny autory začínající daným řetězcem.

knihy(id, nazev): (1, 'abc'), (2, 'def')
autori(id, jmeno): (1, 'pepak'), (2, 'themajkl'), (3, 'huh'), 'pepazdepa')
autoriknih(kniha, autor): (1, 1), (1, 4), (2,1), (2, 2)

SELECT *
FROM knihy
JOIN autoriknih ON autoriknih.kniha=knihy.id
JOIN autori ON autori.id=autoriknih.autor
WHERE autori.jmeno STARTING WITH 'pepa'

Pokud to napíšeš takhle (intuitivně, ale nesprávně), dostaneš ve výsledku knihu 1 dvakrát (jednou pro autora pepak a podruhé pro pepazdepa). Proto tvxovi radím, buď distinct nebo subselect, podle situace.
themajkl themajkl All those moments will be lost in time - like tears in rain. 21.12.2010 21:26  1317
pepak [1316]: Jak by mu tohle mohlo vrátit víc řádků, když pak logicky budeš mít v podmínce omezení na konkrétního autora?
pepak pepak - Pepak.net 21.12.2010 21:22  1316
J8 teda ten požadavek chápu opačně - chce vyhledat všechny knihy, na kterých se podílel zadaný autor.
themajkl themajkl All those moments will be lost in time - like tears in rain. 21.12.2010 21:00  1315
Něco podobného se řešilo minule, ne? Já bych šel cestou přidat sloupeček "autoři", čili to, co je na katalogu.
huh huh 21.12.2010 20:52  1312
(ze zvyku píšu kniha, i když teď koukám, že šlo o katalog. to je jedno)

On asi chce dotaz, který vrátí název knihy a autory. V zásadě je možné to řešit:
1) rozdělením na dva dotazy -- elegantní, čisté řešení :-)
2) nechat to v 1 dotazu a prostě ignorovat, že to název vrátí pětkrát
3) použít group_concat, array atd. podle toho, co z toho db umí
4) přidat si do knihy řetězec autoři, kde se budou buď automaticky (třeba pomocí triggerů) nebo ručně (šikovné tam, kde něco takového se uvádí přímo na knize) udržovat spojený seznam autorů.


themajkl themajkl All those moments will be lost in time - like tears in rain. 21.12.2010 20:30  1311
tvx [1309]: Moc to nechápu. Pokud chceš autory jedné knihy a je jich víc, je správné, že se jich vrátí víc. Pokud chceš knihu, máš špatně napsaný dotaz.
pepak pepak - Pepak.net 21.12.2010 16:56  1310
a) Používej DISTINCT
b) Můžeš zkusit vnořené selecty (SELECT * FROM dila WHERE dilo_id IN (nejaky select, ktery vrati seznam ID del).
tvx tvx Myslet si, že svět je JEN takový, jak - ho v daný čas můžeme pochopit je hloupé. 21.12.2010 16:12  1309
mam problem s tim, ze diky normalizaci tabulky (udaj autor v ni muze ted mit X vyskutu) sem ji musel rozebrat na dve.
takze mam tabulku katalog a zvlast tabulku autori.
problem nastava pri predelavani vsech dotazu kolem vypisu tabulky aby fungovaly jako drive.
pri standardnim joinu tabulek se mi ke kazdymu autorovi vypise znova i polozka katalogu, takze misto jedny polozke se jich pri peti autorech vybere 5.

vim ze tohle muzu vyresit pres group_concat a group ale to je na prepsani pekna prasarna (vypisy vsech vybiranejch polozek do group by atd.)

je nejaky snadny reseni? ani tak moc nepotrebuju vystup tech autoru jako soucast katalogu ale potrebuju v nich podle autora hledat a filtrovat, pricemz chci mit vzdy jen jednu katalogovou polozku.

Jak na to?
knedle knedle online - Krabice živých 20.10.2010 14:20  1308
tohle dilo me trapit nebude :)
themajkl themajkl All those moments will be lost in time - like tears in rain. 20.10.2010 13:56  1307
(ach, třeba název: Mein Kampf, autor nyní již pod pravým jménem Isaac Horowitz! :-)))
knedle knedle online - Krabice živých 20.10.2010 13:52  1306
(a to nemluvim o autorech, kteri si vydaji nejdriv knihu pod pseudonymem, ale protoze se to ted nenosi, jeji nove vydani maji pod svym pravym jmenem)
knedle knedle online - Krabice živých 20.10.2010 13:50  1305
proste nakladatelum uz nemuzu prijit na jmeno...
knedle knedle online - Krabice živých 20.10.2010 13:50  1304
themajkl [1301]: ono je to jeste trochu slozitejsi :)

puvodni - krasny - navrh db:

kniha, kniha_has_povidka, povidka, autor, kniha_has_autor, povidka_has_autor, vydani, kniha_has_vydani

sice funguje, ale je nedostacujici (knihy v knize, knihy rozdelene z duvodu objemu na vice dilu, povidka vydana samostatne jako tenoucka kniha...) - budu muset transformovat do / dilo, autor, dilo_has_autor / a buhvi co dalsiho...
...nekdy

a samozrejme nejvetsi posun byl u puvodne tabulky vydani, ktera kumulovala vse v jednom a ted, jakz takz slusne navrhnuto s 6 tabulkama...


[ 1008 ] <Novější  <<<Nejnovější  Nejstarší>>>  Starší>  

(c) 2001-2011 Lopuch.cz   
Kontakt