21. září bude sraz! Od 18.00 v restauraci Tradice v Praze u Anděla
Autor Zpráva
Parsek96
Profil *
Ahoj,

mám takový dotaz, zdali je toto možné provést pomocí query v MySQL, aniž bych zapojil třeba php. Tak tedy, mám dvě tabulky, jedna má cca 300 tisíc řádků, mimo jiné v nich sloupce "ID", "ID2" (zde prázdné), "unikatninazev" a "porovnano", pak mám další tabulku, kde jsou jen a pouze "ID2" a "unikatninazev".

Co bych potřeboval, jest nějakým způsobem tyto dvě tabulky porovnat a výsledkem by bylo, že v tabulce s mnoha daty, tam kde by se shodoval unikátní název u řádku, tak by políčko ID2 mělo hodnotu ID2 z další tabulky a porovnano = 1.

Snad jsem tu situaci popsal srozumitelně, děkuju předem za jakékoliv návrhy a rady :-)
Tori
Profil
UPDATE se spojením tabulek a využitím části WHERE EXISTS
↓ lepší varianta. Holt ten rok bez programování je znát.
juriad
Profil
Viz: sqlfiddle.com/#!9/e90e2/1

Ten update je triviální:
UPDATE tabulka1 AS t1
JOIN tabulka2 AS t2 ON t1.unikatninazev = t2.unikatninazev
SET t1.ID2 = t2.ID2, t1.porovnano = 1;

Doporučuji index na sloupcích unikatninazev, ale ten tam možná už kvůli unikátnosti máš.
Parsek96
Profil *
juriad:

mockrát ti děkuju! ještě se dovolím zeptat, měl bych to nějak dělat po kouskách s limitem? Nebo to mohu pustit a nechat to projet celé naráz? Kvůli rychlosti, či abych neshodil DB?
juriad
Profil
Když budeš mít ty indexy, tak bych se nebál spuštění celého najednou. Ale klidně si to můžeš otestovat na jiném prostředí (ty dvě tabulky si exportuj a přenes).

Při existenci indexů je to lineární operace (indexy jsou uchovávané seřazené podle abecedy), takže to prostě bude jako bys měl dva slovníky a jel prstem v obou zároveň a hledal, která slova jsou v obou. Bez indexů by to bylo, jako mít dvě obyčejné knihy a hledat slova, která jsou společná.
Parsek96
Profil *
juriad:

mockrát ti děkuju, vytáhl jsi mi fakt velký trn z paty! indexy jsem tam měl, a tak celá operace zabrala max 5 vteřin... dělat to přes php, tak se s tím mamlasím ještě pozítří

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:

0