INSERT do tabulky získané pomocí SELECT – MySQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

INSERT do tabulky získané pomocí SELECT – MySQL – Fórum – Programujte.comINSERT do tabulky získané pomocí SELECT – MySQL – Fórum – Programujte.com

 

Pavelv0
Stálý člen
23. 8. 2016   #1
-
0
-

Zdravím, mám tabulku A se sloupci ID a Table. A poté mám tabulky B s několika sloupci do kterých chci ukládat hodnoty. Tabulky B mají jednoznačné jméno, které je zaneseno v A. Cílem je, z tabulky A zjistit název tabulky B a do té uložit údaje. Momentálně to řeším přes dva dotazy, jedním zjistím jméno tabulky, druhým vkládám, jde to ale udělat jedním?

Něco jako INSERT INTO B.table_name (hodnota1) SELECT table_name FROM B WHERE ID=100 VALUES (12)

Nahlásit jako SPAM
IP: 212.79.110.–
Kit+15
Guru
23. 8. 2016   #2
-
0
-

#1 Pavelv
Místo sady tabulek B použij jednu tabulku B.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:6075:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Pavelv0
Stálý člen
23. 8. 2016   #3
-
0
-

#2 Kit
To zcela dobře nejde. Pro snažší pochopení dejme tomu, že potřebuji pro 10 uživatelů mít tabulku s 10 sloupci a cca milionem řádků. Pro jednoduchost berme, že všechny sloupce mezi tabulkami jsou stejné. No a pak chci mít jednu centrální tabulku, kde bude krom ostatního, ID uživatele a k tomu příslušná tabulka. Je možné že jedna tabulka bude pro více ID. Takže potřebuji podle ID rozhodnout, kam data uložit.

Ve finále může být i stav takový, že tabulka pro uživatele 1 bude mít sloupce a,b,c a a pro uživatele 2 sloupce a,x,y,z. Takže by tam neměl být ani výčet hodnot, ale bude se vkládat jen řetězec s daným pořadím hodnot. Ale to už je level 2, prozatím mi stačí vyřešit level 1

Nahlásit jako SPAM
IP: 212.79.110.–
peter
~ Anonymní uživatel
3981 příspěvků
24. 8. 2016   #4
-
0
-

A proc to nemuzes mit jako jednu tabulku typ,a,b,c,x,y,z ? Proste budou nektere udaje NULL, to se stava.

Musel bys asi pridat vic informaci, oba ty dotazy, pripadne strukturu tabulek. Nebo aspon priklad podobnost s necim jinym, kdyz nechces dat konkretne to sve. Treba system seznamky je podony inzerci. Jen misto zbozi se tam nabizi muzi a zeny.

Nahlásit jako SPAM
IP: 2001:718:2601:26c:aced:9e...–
Pavelv0
Stálý člen
24. 8. 2016   #5
-
0
-

#4 peter
Tak dejme tomu že by to šlo, ale jde o to, jestli je lepší mít jednu tabulku nafouklou a v nejhorším případě 9/10 sloupců s hodnotou NULL nebo provádět dva dotazy( na tabulku a poté na data). Počet dotazů odhaduji cca 100-800 za hodinu

Nahlásit jako SPAM
IP: 185.99.177.–
Kit+15
Guru
24. 8. 2016   #6
-
0
-

#5 Pavelv
Takže bys potřeboval spíše různé struktury pro tabulky B? Něco jako když v obchodě prodáváš různé zboží s různými typy parametrů? I takový problém má své řešení.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Pavelv0
Stálý člen
24. 8. 2016   #7
-
0
-

#6 Kit
Ano, něco takového, mít v tabulce třeba struktury sloupců a,b,c,d + a,b,e,f + a,b,g, + a,b,h,i,j, ale nikdy jsem nic podobného netvořil, to existuje nějaký příkaz pro vytvoření struktury?

Nahlásit jako SPAM
IP: 185.99.177.–
Kit+15
Guru
24. 8. 2016   #8
-
0
-

#7 Pavelv
Pro tyto případy používám první tabulku se sloupci "a", "b". Další tabulky jsou s vazbou 1:1, tedy jako primární klíč používají cizí klíč "a" do první tabulky. Při vyhledávání pak používám (LEFT) JOIN přes všechny tabulky. Výsledek pak v nepoužitých sloupcích obsahuje NULL.

Výhodou takového uspořádání je mnohem vyšší rychlost dotazů než u jedné tabulky s mnoha sloupci nebo uspořádání typu EAV. SELECTy sice obsahují více JOINů, ale zůstávají přehledné.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:c52e:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3981 příspěvků
24. 8. 2016   #9
-
0
-

KIT

Mi treba text nedava smysl. Proste ta terminologie je spatna, kdyz ji 99% lidi nezna :) Neco jako kdybys to napsal japonsky pro cecha. Zkratka, ulehcit si praci.

Ja si myslim, ze on si uvedomuje, ze to muze udelat tabulkami
a b c d + a b e f + a b g + a b h i j nebo
a b + (c d + e f + g + h i j) pripadne
tab_stru: typ, sloupec (tab1, tab1_id_sloupec; tab2, tab2_id_sloupec; )
tab1: id_sloupec, obsah (1, kun; 2, seno) tab s textem
tab2: id_sloupec, obsah (1, 34.6; 2, 11.7) tab s cisly
(Jakoze pro kazdy typ sloupce mas extra tabulku a v tab_stru ktura)
Ale potrebuje vedet, jak do INSERTU to napsat tak, aby mu to ulozilo jednim dotazem podle nejake podminky do spravne tabulky a nemusel to psat na dvakrat. Porad si tim nejsem jist, proto jsem chtel lepsi popis, v cem konkretne ma problem.

PAVELV

SELECT table_name FROM table_list WHERE ... - zjisti jmeno tabulky
INSERT INTO table_name ... - zapis do ni data
Tady mi prave schazi ta podminka. Jakoze to chces zjistovat podle id? Protoze jsi tam psal WHERE ID=100. A tech 100 ziskas odkud?

Nahlásit jako SPAM
IP: 2001:718:2601:26c:aced:9e...–
24. 8. 2016   #10
-
0
-

SELECT table_name FROM table_list ... to půjde, pokud to budeš mít v dotazu správně ošetřený, vždy bude vrácen jen jeden záznam. Ale pak INSERT table_name ..... bude problém. Jedině že by výsledek výběru jména tabulky zpracoval klient a vytvořil a odeslal dotaz se získaným jménem tabulky. Možná to jde jako "prepared statement" udělat bez interakce klienta... jsem na tuto techniku někde narazil při tvorbě UDF, vybavuji si to však matně.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
peter
~ Anonymní uživatel
3981 příspěvků
25. 8. 2016   #11
-
0
-

Kdybych to delal ja, tak si jmena tabulek ulozim do php pole, abych je nemusel neustale tahat z db. Ale spis by mne zajimal postup, jak zjistil, ze to id je prave 100. Jestli by nebylo lepsi do te podminky dat jako vystup primo jmeno tabulky.

Nahlásit jako SPAM
IP: 2001:718:2601:26c:d89:e1b...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 2 hosté

Podobná vlákna

Multiple insert into select — založil Facedown

Select n-ty záznam z tabulky — založil lukas.balaz

Select mezi třemi tabulky — založil Pavelv

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý