Autor Zpráva
Karol.H123
Profil *
Ahojte, mohli by ste mi prosim poradit ako spravit jeden prikaz v PHPMYADMIN?

Mám tieto 4 tabulky:

1. tabulka clanky_sk (v ktorej su tieto stlpce)
id_clanku a kod_clanku

2. tabulka clanky_pl (v ktorej su tieto stlpce)
id_clanku a kod_clanku

Tu by som potreboval aby sa v tabulke clanky_pl porovnal kod_clanku (co je vlastne idendifikator) s kod_clanku v tabulke clanky_sk a vratil id_clanku len tych clankov ktore sa nachadzaju v oboch tabulkach podla daneho idendifikatora.

1. tabulka clanky_jazyk_sk (v ktorej su tieto stlpce)
id, id_clanku, nazov_clanku, popis_clanku, text_clanku

2. tabulka clanky_jazyk_pl (v ktorej su tieto stlpce)
id, id_clanku, nazov_clanku, popis_clanku, text_clanku

V tychto tabulkach by som potreboval aby sa podla minuleho vysledku v tabulkach vyselektovali vysledky podla id_clanku a nasledne sa v tabulke clanky_jazyk_sk prepisali hodnoty nazov_clanku, popis_clanku, text_clanku podla vysledku z clanky_jazyk_pl


O co vlastne ide? Mam 2 verzie webu. Slovensku a Polsku. Kazdu verziu mal na starosti iny clovek a tak sme tam pridavali clanky kazdy inak jediny rovnaky idendifikator tych clankov je kod_clanku. Polska verzia sa vsak nejak postupne prestala aktualizovat a tak tam aktualne chyba docela dost clankov a dalsich veci zo slovenskej. Chcel by som skopirovat vsetky potrebne veci zo slovenskej verzie do tej polskej, ale potrebujem aby clanky, ktore uz su na polskej verzie prelozene aj ostali prelozene.

Cize skopirujem slovenske tabulky do polskej stranky, potom by som tam chcel pustit tento prikaz, nasledne vymazem polske tabulky a slovenske premenujem na _pl


Napriklad:

1. tabulka clanky_sk
5 , 5489
8 , 8547

2. tabulka clanky_pl
1 , 4547
15 , 5489

1. tabulka clanky_jazyk_sk
4, 5, Kolobezky, Clanok o kolobezkach, kolobezky su dopravny prostriedok
7, 8, Motorky, Clanok o motorkach, motorky su dopravny prostriedok

2. tabulka clanky_jazyk_pl
23, 15, Skutery, Artykuł na skuterach, skutery jako środek transportu

Výsledok:
1. tabulka clanky_jazyk_sk
4, 5, Skutery, Artykuł na skuterach, skutery jako środek transportu
7, 8, Motorky, Clanok o motorkach, motorky su dopravny prostriedok

clanky_jazyk_sk nasledne premenujem na clanky_jazyk_pl a clanok 8, nakolko nebol v polskej verzii prelozeny, ostane po slovensky a prelozi sa dotatocne.. :)
TomášK
Profil
Pár poznámek k návrhu, i když to možná vzniklo jen kvůli zjednodušení pro dotaz:
- Proč existují tabulky clanky_sk/pl? Nemohly by místo toho clanky_jazyk_sk mít v sobě kód článku?
- Nebylo by jednodušší mít místo tabulky pro každý jazyk jednu tabulku a sloupec, ve kterém jazyku článek je?
- Nebude lepší řešit chybějící překlady až při výběru z databáze? Dotaz, který vybírá všechny články pro polskou verzi vybere všechny články, pro ty, kde je polský překlad se použije polský, pro ostatní slovenský

K řešení, následující dva dotazy by měly doplnit do polských tabulek chybějící překlady, ale netestoval jsem to.
-- předpokládá unikátní index na kod_clanku
INSERT IGNORE INTO clanky_pl(kod_clanku) SELECT kod_clanku FROM clanky_sk; 
INSERT INTO clanky_jazyk_pl(id_clanku, nazov_clanku, popis_clanku, text_clanku) 
SELECT
  clanky_pl.id_clanku, 
  clanky_jazyk_sk.nazov_clanku,
  clanky_jazyk_sk.popis_clanku,
  clanky_jazyk_sk.text_clanku
FROM
  clanky_jazyk_sk
  JOIN clanky_sk ON clanky_jazyk_sk.id_clanku = clanky_sk.id_clanku
  JOIN clanky_pl ON clanky_pl.kod_clanku = clanky_sk.kod_clanku
  LEFT JOIN clanky_jazyk_pl ON clanky_jazyk_pl.id_clanku = clanky_pl.id_clanku
WHERE 
  clanky_jazyk_pl.id IS NULL
Karol.H123
Profil *
TomášK: Ďakujem, pomohlo.
A je to tak pre to, lebo to sú vlastne ako keby 2 samostatne žijúce weby. Nemajú spoločnú databázu. Pôvodne sa nepočítalo že web bude dvojjazyčný a keď k tomu došlo tak sa vlastne len skopíroval web na novú dómenu/hosting a preložil.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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