Update zaznamu v historii – MySQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Update zaznamu v historii – MySQL – Fórum – Programujte.comUpdate zaznamu v historii – MySQL – Fórum – Programujte.com

 
Hledat
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno
Pergoly a střechy Brno

peter
~ Anonymní uživatel
3714 příspěvků
2. 12. 2016   #1
-
0
-

Souvisi to s predchozim tematem http://programujte.com/…-s-historii/

Mam zaznamy v db, napr.:
Prijmeni * = ddd xxa
Jmeno * = ddd yxa
Prac0 = ddd zxa
Prac1 = ddd axa
Stav = rozepsano
Zm. datum = 2016-11-25 12:26:54
Zm. = uziv. jmeno
Zm. = uziv. id
Id * = 3
Id root = 3

Jedna se mi o konec, kde pro INSERT je tam
Id * = 3
Id root = null

Pri UPDATE potrebuji pridat novy zaznam tak, aby mi do Id root, pokud je NULL dal. Pokud neni, aby zustalo Id root. A pokud uzivatel zadal id_root, aby pouzil jeho. Ale, zas, pokud uzivatel nema prava meni Id_root, aby to neprepsalo. Takze jsem to vymyslel tak, ze pouziji transakce
 

$query[]  = "
CREATE TEMPORARY TABLE $tab_tmp
AS
SELECT * FROM $tab WHERE $key=$value
";
$query[]  = $SQL->createUpdate($tab,$data,$id_name);
$query[]  = "
INSERT INTO $tab SELECT * FROM $tab_tmp
";
$query[]  = "
DROP TEMPORARY TABLE $tab_tmp
";

Jenze, SELECT * mi vybere vsechny sloupce a ja bych potreboval pro ID pouzit formulku

IF(c.`id_root` IS NOT NULL, c.`id_root`,c.`id_form`) AS `id_root`

Update pak nasledne uz vlozi spravne hodnoty.
Kdyz to tam pridam s carkou, tak to bude novy sloupec. A pak by nesedel pocet sloupcu. A prave tam nechci vypisovat vsechny jmena sloupcu.

Jak to udelat?

Nahlásit jako SPAM
IP: 2001:718:2601:26c:b408:1c...–
peter
~ Anonymní uživatel
3714 příspěvků
2. 12. 2016   #2
-
0
-

A nebo, kdyby slo pri INSERT vlozit zrovana id id_root jako prave vytvarene id?

Nahlásit jako SPAM
IP: 2001:718:2601:26c:b408:1c...–
peter
~ Anonymní uživatel
3714 příspěvků
2. 12. 2016   #3
-
0
-

Dokonce tu vidim jeste jeden problem, id by melo byt null nebo 0 nebo -1, proste, aby provedl autoincrement pro INSERT.

Co jsem koukal na net, tak to resi pres table.schema, ziskani jmen sloupcu, tak to bych nechtel.

Pokud to nejde jednoduse, tak bych to udelal asi pres php i se jmeny sloupcu. Ale tomu jsem se chtel vyhnout.

Nahlásit jako SPAM
IP: 2001:718:2601:26c:b408:1c...–
peter
~ Anonymní uživatel
3714 příspěvků
2. 12. 2016   #4
-
0
-

 Mozna by to slo takhle...

CREATE TEMPORARY TABLE `tmp` AS SELECT `nz_forms`.*,`nz_forms`.`id_form` as `id_root_tmp` FROM `nz_forms` WHERE `id_form`=5;# 1 row affected.
UPDATE `tmp` SET `id_root`=`id_root_tmp` WHERE `id_form`=5;
-- sem nacpat UPDATE od uzivatele
ALTER TABLE `tmp` DROP `id_form`;# 1 row affected.
ALTER TABLE `tmp` DROP `id_root_tmp`;# 1 row affected.
INSERT INTO `nz_forms` SELECT 0,`tmp`.* FROM `tmp`;
Nahlásit jako SPAM
IP: 2001:718:2601:26c:b408:1c...–
peter
~ Anonymní uživatel
3714 příspěvků
2. 12. 2016   #5
-
0
-

 Jeste upravenou verzi o cas. Je to teda pomoci transekce

CREATE TEMPORARY TABLE `tmp` AS SELECT *,IF(`id_root` IS NOT NULL, `id_root`,`id_form`) AS `id_root_tmp` FROM `nz_forms` WHERE `id_form`=5;
UPDATE `tmp` SET `id_root`=`id_root_tmp`, `time`=CURRENT_TIMESTAMP WHERE `id_form`=5-- sem nacpat UPDATE od uzivateleALTER TABLE `tmp` DROP `id_root_tmp`;
ALTER TABLE `tmp` DROP `id_form`;
--ALTER TABLE `tmp` DROP `time`;
INSERT INTO `nz_forms` SELECT 0,`tmp`.* FROM `tmp`;
--INSERT INTO `nz_forms` SELECT 0,`tmp`.*,CURRENT_TIMESTAMP FROM `tmp`; -- musite zachovat poradi sloupcu, ja mam time jako posledni, id jako prvni
Nahlásit jako SPAM
IP: 2001:718:2601:26c:b408:1c...–
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, 3 hosté

 

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