Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Trenkiee 24. 10. 2015, 14:33:23

Název: SQL vyhledání a párování ve dvou tabulkách
Přispěvatel: Trenkiee 24. 10. 2015, 14:33:23
Dobry den.

Mam mozno jednoduchu otazku ale popravde neviem sa pohnut. Mam dve tabulky kazda je rozdielna ale kazda ma rovnake udaje v jednom stlpci.
Tabulka A ma stlpce a,b,c,d,e a v stlpci b su referencne kody tabulka B ma stlpce 1,2,3,4 a referencne kody ma v tabulke 4.
Ja by som potreboval funkciu / prikaz ktory by nacital prvy riadok s tabulky A so stlpca b vybral cislo. Presiel  tabulku B stlpec 4 a ak je zhoda zapisal do tabulky B do stlpca 1 hodnotu xyz. A zasa s tabulky A nacital druhy riadok... Atd atd...
Neviem si dobre predstavit syntax SQL prikazu pripadne php script. Problemom je ze tie tabulky maju cca 800.000 riadkov. Dakujem za kazdu radu ktora ma navedie na riesenie.
Dakujem a prajem pekny den
Název: Re:Pomoc s SQL vyhladavanie a parovanie v 2 tabulkach
Přispěvatel: Kit 24. 10. 2015, 16:23:04
Tabulka A ma stlpce a,b,c,d,e a v stlpci b su referencne kody tabulka B ma stlpce 1,2,3,4 a referencne kody ma v tabulke 4.

Nemůžeš pojmenovat tabulku nebo její sloupce čísly. Identifikátor musí začínat písmenem, dolarem nebo podtržítkem. Jinak bys musel všechny identifikátory quotovat.
Název: Re:Pomoc s SQL vyhladavanie a parovanie v 2 tabulkach
Přispěvatel: pb. 24. 10. 2015, 19:09:56
Uvažujete příliš sekvenčně, procedurálně. V SQL se pracuje s množinami.

Možná takto:

update B set "1"=xyz were "4" in (select b from a);
Název: Re:Pomoc s SQL vyhladavanie a parovanie v 2 tabulkach
Přispěvatel: pb. 24. 10. 2015, 19:18:36
Ještě mě napadá... skutečně potřebujete takto hromadně upravovat data v nějaké tabulce? Není to jen vaše představa? U inteligentně navržené datové struktury bývají podobné úlohy vzácné, i když rozhodně ne neobvyklé. Dokážu si představit takovou úlohu třeba při přepočtech jednoho formátu na jiný formát, což bych zařadil mezi jednorázové úkony. Jak s tím souvisí php? Snažíte se něco takového zabudovat do aplikace? Pokud ano, troufám si tvrdit, že existuje lepší řešení.
Název: Re:Pomoc s SQL vyhladavanie a parovanie v 2 tabulkach
Přispěvatel: Trenkiee 24. 10. 2015, 21:02:07
No problemom je ze moje riesenie je asi taketo
Kód: [Vybrat]
      SELECT ARUKOD
FROM csvdata AS td
WHERE (NOT EXISTS
        (SELECT reference
         FROM ps_product AS d
         WHERE (ARUKOD = reference)))
Bohuzial je to neskutocne pomale obe databazy maju cez 600t poloziek.
Zadanie je sparovat polozky ktore maju rovnake hodnoty v 2 stlpcoch.
Název: Re:Pomoc s SQL vyhladavanie a parovanie v 2 tabulkach
Přispěvatel: Trenkiee 24. 10. 2015, 21:04:28
Pozeram sa na to tak ze nacitam polozku stlpca ARUKOD a prebehnem druhu tabulku reference ci najdem presnu zhodu ak ano ulozim ine hodnoty s tabulky A na poziciu polozky s tabulky B. Len neviem presne ako na to aby to nebolo tak strasne narocne ako teraz.
Název: Re:Pomoc s SQL vyhladavanie a parovanie v 2 tabulkach
Přispěvatel: pb. 24. 10. 2015, 21:36:41
... a ak je zhoda zapisal do tabulky B do stlpca 1 hodnotu xyz...

Na zapisování do tabulky musíte použít příkaz update. Příkaz select dělá něco jiného.

Co to má vlastně dělat? Nepotřebujete nakonec obyčejný join?

http://www.w3schools.com/sql/sql_join.asp

Pro lepší výkon potřebujete vytvořit nad tabulkami indexy. 600 nebo 800 nebo kolik vlastně tisíc záznamů není moc.
Název: Re:Pomoc s SQL vyhladavanie a parovanie v 2 tabulkach
Přispěvatel: Trenkiee 24. 10. 2015, 22:25:42
Dobre podme teda na to odzaciatku.
Mam csv export bez indexu. Obsahuje pre mna 2 dvolezite stlpce jeden cislo a druhy parameter.
V databaze je druha tabulka obsahuje cislo zhodne s tabulkou 1 a parameter kam sa ma naimportovat/updatnut parameter s tabulky 1.
Cele to ma byt php script a kedze su to velke tabulky (600.000 riadkov) idealne by to mal spracovavat po 1000 riadkoch.
Hore je sql tiez som skusal join ale nedobehne mi to.
Název: Re:Pomoc s SQL vyhladavanie a parovanie v 2 tabulkach
Přispěvatel: devnull 24. 10. 2015, 22:41:56
Ja bych do toho PHP skript moc nemotal.

Cele csv bych nacpal do docasne tabulky ( mozna je to tabulka 1? ) a pak nad tim spustil idealne jeden update prikaz, ktery by to projoinoval a poupdatoval.
Pokud je tam 600k zaznamu, bude zalezet na indexech.
Update pirkaz bych klidne poslal, kdybych se vyznal v tvem popisu ( nevyznam ).

Mozna by nebylo spatne poslat strukturu tabulek ( vcetene datovych typu a stavajicich indexu) - prikaz SHOW CREATE TABLE x v mysql. a pak konkretne sdelit co je potreba kam nacpat

Název: Re:Pomoc s SQL vyhladavanie a parovanie v 2 tabulkach
Přispěvatel: Kit 24. 10. 2015, 22:43:31
Naimportuj to CSV jako dočasnou tabulku a pak aplikuj některý z dotazů na
http://stackoverflow.com/questions/15209414/how-to-use-join-in-update-query (http://stackoverflow.com/questions/15209414/how-to-use-join-in-update-query)