Diskuze: MySQL dva slupce se stejným jménem z různých tabulek
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 10 zpráv z 10.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
Přejmenuj si ty sloupečky:
SELECT foto_album.PATH as album_path, foto_album.NAME AS album_name, foto_pict.NAME AS pict_name ...
A nepoužívej kartézský součin. Extrémně to zatěžuje databázi.
Použij raději JOIN.
No jó, pravda, těmi aliasy bych si pomohl.. aspoň se je naučím používat. JOIN právě zkouším. Díky za rychlou odpověď.
Někdy se těm aliasům nedá vyhnout
SELECT adddate(now(), INTERVAL -1 YEAR) AS vloni;
... a můžeš vydávat pasy a občanky i 29. února 2012 
Hele, tak už jsem ten
dotaz upravil ale potřebuju poradit s limitem:
Asi bude lepší když napíšu co chci aby to dělalo:
//A teď fakt nevím..
V tabulkách jsou data asi takhle:
- users
USERS_ID Jmeno Nick
4 Pavel vosa
8 Michal misa
- albums
ALBUMS_ID USERS_ID NAME PATH PREVIEW (n-tá fotka jako náhled)
1 4 Kytičky http 3
2 4 Voda http 1
3 4 Stromy http 0
4 8 Kočka http 1
- photos
PHOTOS_ID ALBUMS_ID PICT
1 1 01.JPG
2 1 02.JPG
3 1 03.JPG
4 1 04.JPG
5 2 01.JPG
6 2 02.JPG
7 3 01.JPG
8 3 02.JPG
9 3 03.JPG
10 4 01.JPG
11 4 02.JPG
12 4 03.JPG
Na příkladu vynechám aliasy, takhle mi to funguje až do bodu 3, s tím 4. si nevím rady. N-tý (třeba pátý) záznam dostanu takhle: LIMIT 4,1. Jenže nevím jak to udělat aby se ten LIMIT vztahoval jen na ten výběr z PICT a né na celek.
SELECT users.JMENO, albums.NAME, albums.PATH, albums.PREVIEW
FROM albums
JOIN users ON albums.USER_ID = users.ID
WHERE users.NICK = '$userLogin'
Výstup bych si představoval nějak takhle:
pro (vosa):
Pavel Kytičky http 04.jpg
Pavel Voda http 02.jpg
Pavel Stromy http 01.jpg
Kdo mi poradí (já se s tím trápím celý den) dostane ode mne velké bezvýznamné i++;
A to s tím n-tým výběrem (LIMIT n, 1) by bylo dobré k limitům dopsat...
SELECT users.JMENO, albums.NAME, albums.PATH, albums.PREVIEW, photos.PICT
FROM albums
JOIN users ON albums.USER_ID = users.ID
WHERE users.NICK = '$userLogin'
JOIN photos USING(ALBUMS_ID);
Bylo by vhodné změnit albums.PREVIEW na
albums.PHOTOS_ID. Jinak to nepůjde rozumně udělat.
Pro další práci doporučuji všechny názvy tabulek a sloupců převést do jednotného čísla a psát je malými písmeny.
Pořád to zkouším, hledám co dělám špatně.. ale píše mi to chybu v podledním řádku. zkoušel jsem místo USING dát ON photos.ALBUMS_ID = albums.ALBUMS_ID, ale to samé.
Jinak máš pravdu, asi to tak budu muset udělat, nechtěl jsem to kvůli tomum, že takhle bych mohl nechat jednoduše 0 jako výchozí a tím by byla první fotka... názvy už jsem přepsal(ale tady už to tak nechám, ať v tom není bordel), díky
USING(ALBUMS_ID)
je skutečně to samé jako
ON photos.ALBUMS_ID = albums.ALBUMS_ID
Používání USING je podle mne jediný rozumný důvod, proč používat
albums.ALBUMS_ID místo kratšího albums.ID.
Tak už mi to funguje: (tabulku users zatím přejmenovat nemůžu)
SELECT users.jmeno, album.path, photo.name
FROM photo
JOIN users ON users.nick = '$userNick'
JOIN album ON users.id = album.user_id
WHERE album.photo_id = photo.photo_id
Nevím jestli je to možné, ale myslím, že chyba je v JOIN => WHERE => JOIN ... napadá mě, že po WHERE již JOIN následovat nemůže.. ale možná kecám hlouposti (jinak si to ale nedovedu vysvětlit) Díky
SELECT users.jmeno, album.path, photo.name
FROM album
JOIN users ON users.id = album.user_id
JOIN photo ON album.photo_id = photo.photo_id
WHERE users.nick = '$userNick';
Za ON by měly být pouze podmínky, které se týkají
aktuálního spojení tabulek. Selekce uživatele se dělá až za WHERE. Neboj
se, databáze si to sama přeskupí tak, aby to bylo efektivní. Provádí se to
v jiném pořadí, než v jakém je to napsáno.
Zobrazeno 10 zpráv z 10.