Autor Zpráva
icefireCZ
Profil
Dobrý den,
potřeboval bych pomoci ohledně spojování tabulek nebo dvou "buňek".

Mám tabulku "pokemons" ve které mám zatím jenom z testovacích důvodů tohle:
id INT AI
pokemon_name VARCHAR(99) NULL
pokemon_weight INT(9) NULL


a potom vložím například hodnotu:
INSERT INTO pokemons(id, pokemon_name, pokemon_weight) VALUES(NULL, "Charizard", 69)

a potom mám tabulku "abilities" ve které mám:
id INT AI
ability_name VARCHAR(99) NULL
pokemon_id INT(9) NULL


No a problém je v tom, že existují pokémoni, kteří mají víc jak DVĚ ability (nebo jejich typ, nevím jak to jinak nazvat), a když do tabulky Abilities přidám hodnoty o jednom pokémonovi:
INSERT INTO abilities(id, ability_name, pokemon_id) VALUES(NULL, "Fire", 1)
INSERT INTO abilities(id, ability_name, pokemon_id) VALUES(NULL, "Water", 1)


a vypíšu si je:
SELECT * FROM pokemons
JOIN abilities
ON pokemons.id = abilities.id
WHERE abilities.pokemon_id = 1


Tak bych chtěl aby se mi vypisovalo že ten daný pokémon MÁ tyto dvě ability (nebo má u těch abilit jeho ID), ale to mi nějak nejde. Vypisuje se mi jenom JEDNO, a když dám RIGHT JOIN, tak se mi vypisují všechny, ale potom ostatní hodnoty mají obsah NULL. DĚLÁM NĚCO ŠPATNĚ? :/
Jestli to má něco společného s těma "cizíma klíčema", tak bych poprosil o rekonstrukci této mini ukázky.

Děkuji moc
Radek9
Profil
icefireCZ:
Máš špatně spojovací podmínku:
ON pokemons.id = abilities.pokemon_id

Jestli to má něco společného s těma "cizíma klíčema"
Cizí klíče bys měl určitě používat. Konkrétně na ten sloupec pokemon_id. Vyhneš se nekonzistenci v DB.
icefireCZ
Profil
Radek9:
Jééééžiš, taková chyba a já si ji nevšimnu .... bože
Děkuji

Co se týče těch klíčů, nechápu je, v tom je ten problém. Koukal jsem se na W3Schools, ale tam to mají moc zmatečné.
Keeehi
Profil
Já bych udělal tabulky asi 3. Z abilities bych odstranili pokemon_id a vytvořil novou tabulku, která by spojovala pokemon_id and ability_id. Tím nebude v tabulce abilities vícekrát voda kvůli všem vodním pokémonům.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: