abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
dnes 06:00 | Zajímavý software

OMG! Ubuntu! představuje emulátor terminálu Hyper (GitHub) postavený na webových technologiích (HTML, CSS a JavaScript). V diskusi k článku je zmíněn podobný emulátor terminálu Black Screen. Hyper i Black Screen používají framework Electron, stejně jako editor Atom nebo vývojové prostředí Visual Studio Code.

Ladislav Hagara | Komentářů: 22
dnes 06:00 | Zajímavý článek

I letos vychází řada ajťáckých adventních kalendářů. QEMU Advent Calendar 2016 přináší každý den nový obraz disku pro QEMU. Programátoři se mohou potrápit při řešení úloh z kalendáře Advent of Code 2016. Kalendáře Perl Advent Calendar 2016 a Perl 6 Advent Calendar přinášejí každý den zajímavé informace o programovacím jazyce Perl. Stranou nezůstává ani programovací jazyk Go.

Ladislav Hagara | Komentářů: 4
3.12. 16:24 | Nová verze

Byla vydána Mageia 5.1. Jedná se o první opravné vydání verze 5, jež vyšla v červnu loňského roku (zprávička). Uživatelům verze 5 nepřináší opravné vydání nic nového, samozřejmě pokud pravidelně aktualizují. Vydání obsahuje všechny aktualizace za posledního téměř půldruhého roku. Mageia 5.1 obsahuje LibreOffice 4.4.7, Linux 4.4.32, KDE4 4.14.5 nebo GNOME 3.14.3.

Ladislav Hagara | Komentářů: 14
3.12. 13:42 | Pozvánky

V Praze probíhá konference Internet a Technologie 16.2, volné pokračování jarní konference sdružení CZ.NIC. Konferenci lze sledovat online na YouTube. K dispozici je také archiv předchozích konferencí.

Ladislav Hagara | Komentářů: 0
2.12. 22:44 | Komunita

Joinup informuje, že Mnichov používá open source groupware Kolab. V srpnu byl dokončen dvouletý přechod na toto řešení. V provozu je asi 60 000 poštovních schránek. Nejenom Kolabu se věnoval Georg Greve ve své přednášce Open Source: the future for the European institutions (SlideShare) na konferenci DIGITEC 2016, jež proběhla v úterý 29. listopadu v Bruselu. Videozáznam přednášek z hlavního sálu je ke zhlédnutí na Livestreamu.

Ladislav Hagara | Komentářů: 25
2.12. 15:30 | Zajímavý projekt

Společnost Jolla oznámila v příspěvku Case study: Sailfish Watch na svém blogu, že naportovala Sailfish OS na chytré hodinky. Využila a inspirovala se otevřeným operačním systémem pro chytré hodinky AsteroidOS. Použita je knihovna libhybris. Ukázka ovládání hodinek na YouTube.

Ladislav Hagara | Komentářů: 15
2.12. 14:15 | Nová verze

Byla vydána verze 7.1.0 skriptovacího jazyka PHP používaného zejména k vývoji dynamických webových stránek. Jedná se o první stabilní verzi nejnovější větvě 7.1. Přehled novinek v dokumentaci. Podrobnosti v ChangeLogu. K dispozici je také příručka pro přechod z PHP 7.0.x na PHP 7.1.x.

Ladislav Hagara | Komentářů: 4
2.12. 12:55 | Nová verze

Google Chrome 55 byl prohlášen za stabilní. Nejnovější stabilní verze 55.0.2883.75 tohoto webového prohlížeče přináší řadu oprav a vylepšení (YouTube). Opraveno bylo také 36 bezpečnostních chyb. Mariusz Mlynski si například vydělal 22 500 dolarů za 3 nahlášené chyby (Universal XSS in Blink).

Ladislav Hagara | Komentářů: 4
2.12. 11:55 | Pozvánky

Máte rádi svobodný software a hardware nebo se o nich chcete něco dozvědět? Přijďte na 135. sraz spolku OpenAlt, který se bude konat ve čtvrtek 8. prosince od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Sraz bude tentokrát tématický. Bude retro! K vidění budou přístroje jako Psion 5mx nebo Palm Z22. Ze svobodného hardwaru pak Openmoko nebo čtečka WikiReader. Přijďte se i vy pochlubit svými legendami, nebo alespoň na pivo. Moderní hardware má vstup samozřejmě také povolen.

xkucf03 | Komentářů: 1
2.12. 00:10 | Nová verze

Byla vydána verze 3.2 svobodného systému pro detekci a prevenci průniků a monitorování bezpečnosti počítačových sítí Suricata. Z novinek lze zmínit například podporu protokolů DNP3 a CIP/ENIP, vylepšenou podporu TLS a samozřejmě také aktualizovanou dokumentaci.

Ladislav Hagara | Komentářů: 0
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 773 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

Dotaz: mysql join iba vtedy ak je hodnota jednej row ina ako 0

6.2.2013 16:17 adrinko | skóre: 22
mysql join iba vtedy ak je hodnota jednej row ina ako 0
Přečteno: 480×
ahojte, mam takyto mysql prikaz
    		SELECT o.user_id, o.date, i.*, k.adresa
    		FROM objednavky_items i
    		JOIN objednavky o ON (i.objednavka_id = o.id)
    		JOIN kontrolovanie k ON (i.item_id = k.id)
    		WHERE o.id = '$order_id' AND o.hash = '$order_hash' AND o.dokoncena = 'A'
Problem je, ze by som chcel, aby sa JOIN kontrolovanie k ON (i.item_id = k.id) vykonalo a k.adresa naplnila len vtedy, ak i.item_id!=0

Ako na to? Vdaka!

Odpovědi

6.2.2013 16:27 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: mysql join iba vtedy ak je hodnota jednej row ina ako 0
zmodifikoval som to takto a zda sa, ze to vracia dobre vysledky
SELECT o.user_id, o.date, i.*, k.adresa
FROM objednavky_items i
INNER JOIN objednavky o ON (i.objednavka_id = o.id)
LEFT JOIN kontrolovanie k ON (i.item_id = k.id)
WHERE o.id = '$order_id' AND o.hash = '$order_hash' AND o.dokoncena = 'A'
je to ale spravne riesenie mojho problemu?
6.2.2013 21:19 kuka
Rozbalit Rozbalit vše Re: mysql join iba vtedy ak je hodnota jednej row ina ako 0
Ne neni, nikde nevidim zadnou podminku na != 0. Ovsem nevylucuju, zes nespravne popsal svuj problem a pak by to treba spravne mohlo byt.
7.2.2013 12:29 logik
Rozbalit Rozbalit vše Re: mysql join iba vtedy ak je hodnota jednej row ina ako 0
adrinko: No protože to left join se chová podobně: on evidentně nemá pro předmět 0 záznam v tabulce kontrolovanie nemá.

kuko: Pokud pro předmět není odpovídající záznam, měl bys tam použít nikoli 0, ale NULL. Znemožňuješ tak např. použití cizích klíčů, který bys měl definovat, abys zaručil konzistenci databáze.
7.2.2013 13:11 kuka
Rozbalit Rozbalit vše Re: mysql join iba vtedy ak je hodnota jednej row ina ako 0
Ja naprosto netusim, kde existuje nebo neexistuje zaznam a co ma nebo nema byt null. Jedine, co rikam, je, ze left join neni ekvivalentni s podminkou dotazeni adresy jen pro id!=0. Napriklad trivialne pokud kontrolovanie pro id=0 bude existovat, tak se adresa dotahne (nevim z ceho je "evidentni", ze takovy zaznam v tabulce nebude). Podobne ovsem bude adresa prazdna pro id=17, pokud nebude v tabulce kontrolovanie odpovidajici zaznam. Mozna ze chce tazatel ve skutecnosti prirozene vypadajici chovani "tam kde kontrolovanie existuje, pouzij z nej adresu", ale pak neni jasne, proc se na to nezepta rovnou.
7.2.2013 14:40 logik
Rozbalit Rozbalit vše Re: mysql join iba vtedy ak je hodnota jednej row ina ako 0
Bez urážky, když chceš lidem radit, tak holt musíš číst i mezi řádkama....

Málokdo umí položit otázku zcela přesně: ono to už proto, že položit správnou otázku je většinou to nejsložitější na nalezení odpovědi.
7.2.2013 15:01 j
Rozbalit Rozbalit vše Re: mysql join iba vtedy ak je hodnota jednej row ina ako 0
Predevsim je treba psat dotazy, ktere delaji to co maji, a ne ze prave ted a za techto okolnosti pvraceji spravny vysledek. Left join dela uplne neco jinyho.

zjednodusene: join ... predpoklada se vazba 1:1, pri neexistenci zaznamu v jedne z obou tabulek nevrati nic left (pripadne right) join ... prepodklada se obecna vazna 1:N (N:1), v pripade neexistence zaznamu v navazovane tabulce obecne vraci null v jejich sloupcich

Nikde tam nevidim nic o tom, ze by nejakej sloupec mel nebo nemel mit nejakou hodnotu. Pokud tam dava left join a vraci mu to spravny vysledky, tak trebas jen proto, ze aktualne existuje pratave vazba 1:1, jenze kdyz existovat (at uz umyslne nebo chybou) prestane, tak to vrati kraviny.
7.2.2013 16:21 logik
Rozbalit Rozbalit vše Re: mysql join iba vtedy ak je hodnota jednej row ina ako 0
Nelze než zopakovat radu: naučte se číst mezi řádky. Proč asi autor chtěl tam dát výsledky jen pro id<>0? Hádej. Že by proto, že 0 používá pro identifikaci: zde není předmět?? A proto ve skutečnosti jeho dotaz zněl: jak zařídím, aby ve výpisu byly i ty řádky, který nemaj odpovídající řádek v tý druhý tabulce, protože INNER JOIN mi je vyhodí? To s prominutím napadne i průměrně vyspělou opici, pokud má ta opice opravdu snahu tazateli pomoci a ne si honit ego, že tazatel je blbec a neumí SQL.

Kardinalita pak s tím nemá vůbec co dělat, teda ne tím způsobem kterým píšeš: vazbí se na PK, takže je jasný, že je to vazba (0,N):(0,1), a problémy mu působí právě to, že to není vazba N1, ale N:(0,1). Navíc i kdyby to PK nebyl a byla to vazba M:N, tak z dotazu nijak nevyplývá, že by to bylo špatně. Chtít vypsat všechny kontroly výrobků a navíc nekontrolované výrobky dává dobrý smysl.

To, co má v návrhu blbě a na co byste ho měli upozornit není to, že tam má left join, ten je naprosto v pořádku, ale to, že používá pro indikaci neexistence záznamu v druhé tabulce. To je jádro problému.
7.2.2013 16:43 logik
Rozbalit Rozbalit vše Re: mysql join iba vtedy ak je hodnota jednej row ina ako 0
Jinak ještě: Join rozhodně NEPŘEDPOKLÁDÁ vazbu 1:1, stejně ani tak Left Join NEPŘEDPOKLÁDÁ vazbu 1:N, všechny JOINY jdou použít na jakoukoli kardinalitu.

Protipříklad je jednoduchý: jak inner, tak outer join má smysl např. u tabulky zachycující příbuzenství. Přesto je příbuzenství obecně vazba (0,N):(0,M) a tedy nesplňuje žádný z Tvých předpisů (na obou stranách má nulu).

INNER JOIN a (LEFT|RIGHT) OUTER JOIN se naprosto neliší tím, na jaké kardinality se aplikují, ale tím, jaké výsledky vracejí: zatímco INNER join vrací pouze subjekty s existující vazbou, OUTER join vrací seznam subjektů (nezávisle na tom, zdali mají vazbu) + informace o potenciálních vazbách.
7.2.2013 15:37 kuka
Rozbalit Rozbalit vše Re: mysql join iba vtedy ak je hodnota jednej row ina ako 0
Ja prave neradim, ale pouze odpovidam na otazku. Kdybych chtel radit, tak rada by byla "nauc se SQL a nebudes muset hadat, co dela tvuj triradkovy dotaz".
7.2.2013 16:28 logik
Rozbalit Rozbalit vše Re: mysql join iba vtedy ak je hodnota jednej row ina ako 0
V tom případě jdi prosím odpovídat na otázky někam jinam. Pokud jsi si nevšiml, tady není odpovídárná, tady je PORADNA a tedy zde není cílem tazateli ODPOVĚDĚT a libovat si nad tím, jak jsem chytřejší než on, ale PORADIT mu tak, aby jeho řešení problému bylo správné.

Vzhledem k tomu, že jak píšeš, tak kdybys chtěl radit, tak budeš na tazatele taktéž sprostý a přitom Tvoje rada mu nijak nepomůže, tak jen prosím, nechoď se radši ani radit. Tedy alespoň do té doby, než se naučíš alespoň základům mezilidské slušnosti, empatie a tolerance a dokážeš přjmout to, že existují také lidé, co se teprv programovat učí.
7.2.2013 17:37 kuka
Rozbalit Rozbalit vše Re: mysql join iba vtedy ak je hodnota jednej row ina ako 0
Aha takze v poradne se neodpovida na dotazy? To se dela v odpovidarne? Dekuji za toto rozsireni obzoru, ale ponecham si svuj nazor na vec. Nevim, co by melo byt "sprosteho" na tom, kdybych nekomu poradil, ze se ma neco naucit - zjistit napr. na googlu co dela left join trva asi tak stejne dlouho jako napsat dotaz zde do poradny. Nemyslim si, ze je smysluplnejsi a pro tazatele prinosnejsi, kdyz mu papouskujes svoji vlastni "definici" left joinu. Pokud jde o zakladni slusnost, nikoho odtud napriklad na rozdil od tebe nevyhazuju a nespekuluju bezduvodne o jeho charakteru, takze si prosim nalej vlastni medicinu a uz mi nic dalsiho nepis. Diky.
8.2.2013 17:02 logik
Rozbalit Rozbalit vše Re: mysql join iba vtedy ak je hodnota jednej row ina ako 0
Ano, v poradně není primárním cílem zodpovědět dotaz, ale pomoci: a to znamená někdy i opravdu dotaz nezodpovědět. Nebo to chceš tvrdit, že pokud by někdo zavolal do psychiatrické poradny, jak se nabíjí pistole, tak je správné dotaz zodpovědět? Zde je situace stejná: tazatel ve skutečnosti měl jiný problém a zodpovězení otázky by mu nejen nepomohlo, ale i by ho pravděpodobně víc zmátlo a přidělalo mu práci.

Najit na googlu co dělá left join je opravdu záležitost minuty. Ale on se NEPTAL, co dělá leftjoin. Chci todle, jak to udělám? To samostudiem googlu je práce na desítky minut a naprosto vhodné téma na otázku do poradny. A dokonce když našel správné řešení, tak ho dal do diskuse pro ostatní. Takže Tvůj argument i Tvoje kritika tazatele je jaksi dosti mimo.

Ohledně údajné mojí definice LEFT JOINU, co z toho co jsem o něm psal konkrétně není pravda (navíc to byla jen korekce j., který opravdu o leftjoinu psal blbiny).

A ohledně slušnosti: psal jsi, že pokud by jsi chtěl radit, tak bys mu poradil, ať se jde naučit SQL, a to poměrně dosti dehonestujícím způsobem. Pokud se Ti to zdá slušné, tak Ok, je to Tvůj názor, ale můj názor je prostě takový, že to je neomalenost. Stejnětak je IMHO dosti arogantní Tvůj postoj, že se nebudeš snažit pochopit, jak tazatel otázku myslel popř. co je jeho skutečný problém a prostě mu odpovíš, ať už mu tvoje odpověď pomůže, nebo uškodí.

8.2.2013 09:25 j
Rozbalit Rozbalit vše Re: mysql join iba vtedy ak je hodnota jednej row ina ako 0
Nekam jinam (trebas doprdele) bys mel jit predevsim ty, protoze radis kraviny. Jestli totiz nekomu neco nepomuze, tak tvoje vesteni z kristalovy koule.

Pokud se nekdo na neco zepta, tak odpovdam na to, na co se ptal a nevymejslim kraviny s tim, ze by to mohlo byt nejak, protoze tak bych to udelal ja.
8.2.2013 17:08 logik
Rozbalit Rozbalit vše Re: mysql join iba vtedy ak je hodnota jednej row ina ako 0
Co jsem poradil za kravinu? Konkrétně?

Jinak jak je vidět z reakce tazatele (napsal řešení a už se neozval, tj. řešení mu vyhovuje), tak moje "věštění" funguje. Že by to bylo tím, že to není až tak věštění, ale praxe v programování a pedagogice programování? Auto také lidem, co neznali jeho princip přišlo jako "magické čertovo vozítko"....

8.2.2013 23:10 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: mysql join iba vtedy ak je hodnota jednej row ina ako 0
Zdravím vás priatelia, sorry, bol som mimo pc doteraz. Vidím, že sa tu rozprúdila vcelku slušná debata. Ale naspäť k problému. Ten left join som našiel a zatiaľ mi dáva správne výsledky, ale nebude to to najlepšie riešenie, keďže tam nie je tá podmienka i.item_id!=0. Totižto, ak je i.item_id !=0, tak mi to pri joine dá do "adresa" správnu vec. Pri záznamoch, kde je i.item_id=0 nie sú v tej ľavej tabuľke left joinu záznamy, takže mi to v tom pôvodnej mysql dotaze (otvárajúca otázka tohto postu) preskočilo tento záznam (čo je pre moje potreby zle, lebo potrebujem aj tie záznamy vo výsledku). Ja by som však potreboval, aby to vracalo aj záznamy s i.item_id=0, avšak v tom prípade by mala byť "adresa" naplnená prázdnou hodnotou, t.j. adresa vo výsledkoch=''. Preto mi to zatiaľ funguje s tým left joinom, ktorý vráti i tie výsledky, kde i.item_id=0, čo je pre mňa dobre a zároveň nechá návratovú hodnotu "adresa" prázdnu. Poprosil by som však vás - skúsenejších o poradenie, aby to bol správne napísaný príkaz, t.j. aby sa v ňom dalo orientovať. Ďakujem!
9.2.2013 14:10 Logik
Rozbalit Rozbalit vše Re: mysql join iba vtedy ak je hodnota jednej row ina ako 0
Jo, je to správně napsanej příkaz.

To, co tam máš nestandardně a v podstatě se dá říci blbě je to, že nepsaným standardem je, že když někde neexistuje vazba (tzn. není tam předmět), tak se to indikuje nikoli nulou, ale hodnotou NULL. A to proto, že pak např. můžeš na item_id zadefinovat tzn. cizí klíč (foreign key) neboli referenční integritu. To bych doporučoval přepsat, ale to nemá žádnej vliv na dotaz.

Další věc, která je tam "podezřelá" je, že se na tabulku kontrolovanie se odkazuješ pomocí sloupečku item_id. Zpravidla se na tabulku odkazuje sloupcem s jménem tabulky. Takhle to vypadá, že ten sloupeček item_id odkazuje na nějakej předmět a nikoli na kontrolu toho předmětu. Pravděpodobně máš pro každej předmět max jednu kontrolu a tak máš tabulku kontrola a předmět "sloučenou" a je to teda fakticky dobře, ale doporučoval bych změnit název sloupce item_id tak, aby odpovídal tomu, na co ukazuje, tj. kontrolovanie_id.
9.2.2013 19:31 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: mysql join iba vtedy ak je hodnota jednej row ina ako 0
Logik, ďakujem Ti veľmi pekne za vysvetlenie. Budem na to v budúcnosti myslieť. Ešte raz vďaka!
7.2.2013 08:47 j
Rozbalit Rozbalit vše Re: mysql join iba vtedy ak je hodnota jednej row ina ako 0
JOIN kontrolovanie k ON (i.item_id = k.id) and i.item_id <> 0

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.