Autor Zpráva
Pan X
Profil
Zdravím, řeším teď drobet složitější problém a nevim si sním rady.

Kamarád mě prosil jestli bych mu nenapsal script na opravu databáze, protože se mu pokazilo vložení dat a databáze není úplná. Z údajů, které mám se dá zbytek automaticky vygenerovat jen nevím jak to ideálně vyřešit.

Mám tuto tabulku: http://2i.cz/43e74963b0

Problém je v tom že správně by měla vypadat takto: http://2i.cz/25812f05d6

(na pořadí nezáleží, jen aby příslušné id patřili ke správným protějškům)

Potřebuji nějak automaticky vygenerovat vztahy a doplnit tabulku. Ručně by to nebyl problém, ale nedaří se mi vymyslet jak to přepracovat do scriptu. (ručně není možné dělat, dat je hromada)
Potřeboval bych alespon nakopnout z jakého konce to mám chytit, zbytek už si napíši sám

Mohl by někdo poradit?


Předem díky
mimochodec
Profil
Nemohl bys popsat, co je na tom prvním špatně a na druhém správně, nebo o co tam vlastně jde? Opravdu musíš zatěžovat ty, co by ti chtěli poradit?


Na druhý pohled: v té druhé tabulce jsou zřejmě všechny permutace čísel v nějakém rozsahu. Jestli to správně chápu, chceš vygenerovat všechny, pro každou ověřit, jestli už v databázi je a pokud není, vložit ji tam. Jestli to je jednorázová operace, udělej si tolik vnořených cyklů, kolik těch čísel je (tak jaks to zobrazil, by to byly dva cykly), v každém průchodu ověř přítomnost (SELECT COUNT) a když nenajdeš, vlož (INSERT).

A jinak bych řekl, že vůbec existence takové tabulky zavání špatným návrhem aplikace a je nadbytečná.
Pan X
Profil
mimochodec:
databáze představuje databázi slovíček,

Je k dispozici seznam EN, CZ a slovíček. S tím že jak bývá zbykem jedno EN slovíčko má více CZ výrazů a naopak... Tudíž když máme

EN tabulku:
id | text
1. | find
2. | found


CZ tabulku:
1. | najít
2. | našel
3. | nalezl


A tabulka co je výše je sločuje tudíž je třeba mít:¨


id_en | id_cz
1 | 1
1 | 2
1 | 3
2 | 1
2 | 2
2 | 3


Akorát že databáze která je k dispozici teď obsahuje data jen jako:
id_en | id_cz
1 | 1
1 | 3
2 | 1
2 | 2


což je neúplně a já musím automaticky doplnit:

id_en | id_cz
1 | 2
2 | 3

s tím, že to by mělo jít automaticky dohledat vždy.. podle idecek
mimochodec
Profil
Pan X:
ok, tak jsem myslel, že jsem to pochopil, ale byl to omyl. Možná poradí někdo jiný, já nevím, co chceš. Resp. nechápu co máš a co jak z toho chceš udělat.
Kajman
Profil
Pan X:
a já musím automaticky doplnit 1 | 2 a 2 | 3

A jak jste přišel na zrovna na tyto kombinace?
Pan X
Profil
Vezmu id_en = 1 a vidím že pro id_cz je také 1, takže když vytáhnu všechny id které odpovídají id_cz 1 => dostanu id_en 1,2 a když pro id_en 2 platí id_cz 2 tak automaticky musí i id_en 1 platit id_cz 2.

Ručně by to jít mělo, ale jak tendle postup zapsat do scriptu aby to nebyla nějaká hrozná prasárna mám problém...
Kajman
Profil
Možná to půjde takto nějak
#INSERT INTO preklady
SELECT DISTINCT p2.id_en,
                p3.id_cz
FROM   preklady p1
       JOIN preklady p2
         ON p1.id_cz = p2.id_cz
       JOIN preklady p3
         ON p1.id_en = p3.id_en
       LEFT JOIN preklady p4
         ON p2.id_en = p4.id_en
            AND p3.id_cz = p4.id_cz
WHERE  p4.id_en IS NULL

Těžko říct, jestli to je přesně to, co hledáte. Také nevím, jestli chcete chce po doplnění nových vazeb znovu dopolnit stejně další a další - to byste musel spouštět ten příkaz tak dlouho, dokud něco přidává.

Každopádně si nemyslím, že to takhle automaticky bude vždy pravda. Stejné slovo v jednom jazyku může mít různé významy a jejich překlad do jiného jazyka může být závislý na tom významu.

Při vazbách
leaf = list
paper = list
paper = papír
tedy automaticky doplníte nesmyslný překlad leaf = papír?
Pan X
Profil
Kajman:
díky, odzkouším to

Při vazbách


leaf = list
paper = list
paper = papír
tedy automaticky doplníte nesmyslný překlad leaf = papír?

Tak tadle varianta mě nenapadla, abych se přiznal.... a obávám se že ano, že by to automaticky přidalo i tuto variantu jako správnou. Otázka je jestli se toto dá vůbec nějak řešit. Script, který načítal slovíčka z externího souboru měl takto fungovat aby automaticky přiřazoval nové významy ke starým slovíčkům na základě tohodle pravidla, akorát nefungoval vůbec jak měl.

Asi s ním budu muset ještě probrat, zdá se že to bude celkem neřešitelný problém....
Kajman
Profil
Pan X:
zdá se že to bude celkem neřešitelný problém

Stejná slova různého významu by musela mít různá id.
Pan X
Profil
Automat to nepozná... asi budu muset přepsat celej parser a zkusit tam data nacpat do db znova a správně...

(... i když stejne to neřeší jak přidávat významy ke slovíčkům abych se vyhnul sloučení tech nesmyslů :( )

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: