Autor Zpráva
dmn
Profil
Jak lze zjistit relaci sloupce v tabulce na sloupec v jiné tabulce? (php, mysql)

Udělal jsem formulář, pomocí kterého lze editovat (přidat, upravit, smazat) vesměs jakoukoliv tabulku (myšleno záznamy v tabulce, tedy řádky).

Problém mám při možnosti přidat: vytvoří se inputbox pro každý sloupec, event. s defaultní hodnotou apod. Pokud je ovšem relace na 'jinou tabulku', rád bych z 'jiné tabulky' (konkrétního sloupce, na který je vazba) nabral možné hodnoty a nabídl je formou selectu.

Vše ostatní zde zmíněné je vcelku jasné a bezproblémové. Jediné, kde jsem uvízl, je zjištění relace. Za radu jakéhokoliv způsobu (více či méně fundamentálního) budu rád. Závěrem podotýkám, že dělám univerzální řešení, proto nelze vytvářet pomocný seznam relací apod.

Snad jsem problém popsal dost jasně, na případné dotazy rád odpovím. Děkuji za Vaší snahu
Kajman_
Profil *
Zkuste
show keys from `tabulka`
dmn
Profil
Vyzkoušel jsem, ale bohužel z navrácených informací jsem nevyčetl potřebnou informaci. Ani v dokumentaci, kde jsou hodnoty popsané, jsem nenalezl potřebné (viz http://dev.mysql.com/doc/refman/6.0/en/show-index.html). Momentálně elaboruji s http://dev.mysql.com/doc/refman/6.0/en/key-column-usage-table.html, ale zatím bez výsledku.
Aesir
Profil
dmn:
Jak lze zjistit relaci sloupce v tabulce na sloupec v jiné tabulce?
Vyparsovat z
SHOW CREATE TABLE



Momentálně elaboruji s http://dev.mysql.com/doc/refman/6.0/en/key-column-usage-table.html, ale zatím bez výsledku.
Tam se bohužel nedozvíte o navázaných akcích na události (ON UPDATE, ON DELETE, apod.).
Kajman_
Profil *
dmn
Pokud tam máte cizí klíče, tak by v information_schema.KEY_COLUMN_USAGE měly být k nalezení.
dmn
Profil
Aplikoval jsem dotaz SHOW CREATE TABLE (viz příspěvek uživatele Aesir), ale bohužel v navráceném výsledku se mi nepodařilo najít informaci o relaci (možná jsem jen 'slepý', kdyby někdo měl odzkoušeno, podělte se o vědomosti).

V INFORMATION_SCHEMA jsem se skutečně potřebné nedověděl.

Zatím největší pokrok je SELECT col FROM tab PROCEDURE ANALYSE(), kde výsledek mimojiné obsahuje záznam z navázané tabulky, ovšem pouze jeden. Pokud by dotaz vracel všechny záznamy z příslušného sloupce navázané tabulky nebo jméno tabulky v relaci, byla by má potřeba vyřešena.
dmn
Profil
dmn
Pokud tam máte cizí klíče, tak by v information_schema.KEY_COLUMN_USAGE měly být k nalezení.

Pomocí KEY_COLUMN_USAGE se v mém případě dovím pouze název sloupce, který je primárním klíčem pro danou tabulku. V podstatě by to mohlo postačovat za předpokladu, že by na sebe byly navázány pouze sloupce primárních klíčů.
Aesir
Profil
dmn:
Aplikoval jsem dotaz SHOW CREATE TABLE (viz příspěvek uživatele Aesir), ale bohužel v navráceném výsledku se mi nepodařilo najít informaci o relaci

A jsou ty relace vyjádřené cizími klíčy nebo ne? Pokude ne, tak asi jedině zkusit odhadnout relaci na základě nějaké jmenné konvence primárních klíčů a tabulek, ale o spolehlivosti bych v tom případě moc nemluvil ;)
dmn
Profil
Upřímně, relace jsem vytvářel pomocí nějakého grafického návrháře v phpmyadmin tak nevím, jakým způsobem jsou vyjádřené. Samozřejmě bych nerad zpochybňoval spolehlivost, tématice se věnuji neprofesionálně, proto jsem uvedl to, co jsem uvedl.
Aesir
Profil
dmn:
Upřímně, relace jsem vytvářel pomocí nějakého grafického návrháře v phpmyadmin tak nevím, jakým způsobem jsou vyjádřené.

A v phpmyadminovi to nějak poznáte, že tam relace je?
dmn
Profil
V phpmyadmin při zobrazení struktury tabulky je volba zobrazit relace (relation view). Tato funkce zobrazí dvousloupcovou tabulku relací aktuálně zvolené tabulky vůči dané databázi (první sloupec obsahuje názvy sloupců tabulky a ve druhém sloupci lze pomocí selektu zvolit relaci k jiné tabulce). Dále je možné relace vytvářet, sledovat a upravovat pomocí jakéhosi návrháře (grafické rozhraní). Musím ovšem podotknout, že ani jeden způsob není úplně transparentní v tom smyslu, co člověk vytváří (alespoň dle mého názoru).
Aesir
Profil
dmn:
Tak jsem si zázračného phpmyadmina nainstaloval, debianí balíček obsahoval verzi 2.11.9.3 (nakolik je aktuální nevím) a v něm nástroj "Zobrazit relace" vytváří opravdu cizí klíče a opravdu jsem je přes
SHOW CREATE TABLE
viděl :)
Možná jste se koukal na špatnou tabulku?
dmn
Profil
Nevím jakým záhadným způsobem, ale vytvořil jsem vlastní klíče. Zkusím tedy vytvořit cizí klíče a identifikovat je pomocí SHOW CREATE TABLE. Zatím díky za rady, až odzkouším, dám vědět.
Kajman_
Profil *
A neukládá si pma někam do svých tabulek nakreslené relace, když se použijí myisam tabulky, které cizí klíče nepodporují? Zdrojáky pma by mohly pomoci záhadu vyřešit..
Aesir
Profil
Kajman_:
A neukládá si pma někam do svých tabulek nakreslené relace, když se použijí myisam tabulky, které cizí klíče nepodporují? Zdrojáky pma by mohly pomoci záhadu vyřešit..

Přesně z toho důvodu jsem to zkusil nainstalovat - u myisam ten nástroj není vůbec nabízen.
dmn
Profil
Děkuji všem za rady a projevenou snahu! Dobracování se k vysněnému konci:

1) tabulky jsem měl typu myisam, který nepodporuje cizí klíče -> ALTER TABLE tab ENGINE = innodb

2) pracuji lokálně s balíkem xampp lite, který defaultně nepodporuje innodb -> potřeba upravit nastavení v my.cnf

3) SHOW CREATE TABLE skutečně zobrazuje potřebné informace ... FOREIGN KEY (`col`) REFERENCES `tab` (`col`) ...

Ještě jednou díky za pomoc...
dmn
Profil
Doplnění: pro tento účel lze použít i INFORMATION_SCHEMA.KEY_COLUMN_USAGE:

[TABLE_SCHEMA] => db
[TABLE_NAME] => tab
[COLUMN_NAME] => col
[REFERENCED_TABLE_SCHEMA] => db
[REFERENCED_TABLE_NAME] => tab
[REFERENCED_COLUMN_NAME] => col

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: