Autor Zpráva
jan65
Profil *
Ahoj, potreboval bych poradit syntax ktera dokaze vzit cislo z pole X a updatovat respektive pricist do pole Y. Je to jedna a ta sama tabulka..

Melo by to byt Neco na zpusob:

UPDATE cisla SET cislo_2 = + (SELECT cislo_1 FROM cisla)

Diky
__construct
Profil
UPDATE cisla SET cislo_2 = cislo_2 + cislo_1;
panther
Profil
jan65:
update cisla set cislo_2 = cislo_2 + cislo_1 where id = ...
tipero
Profil *
A šlo by také udělat to samé, ale aby se to přičítalo do následného řádku?
Kajman_
Profil *
Obecně se dá říci že ano. V update můžete používat spojení, viz. syntaxe.
tipero
Profil *
Spojeni? Ja jsem si po dlouhem studovani nasel:
UPDATE tabulka SET sloupec = sloupec + 1 WHERE id DISC LIMIT 1
ale to pravdepodobne (jestli vubec) udela ze pricte +1 pouze v tom samem radku. Takze bych ted potreboval neco co mi predtim zkopiruje cely radek do noveho radku a pak se v nem provede to pričtení, nebo v te podmínce nějak říct, že ma do posledního řádku přičíst hodnotu ze řádku předposledního. (tu jednicku bych si pak nechal vkladat vzdycky do noveho řádku pomocí DEFAULT v definici sloupce tabulky.
Ale přiznám se, že se v tom začínám topit.
Můj prvotní záměr byl přidat do tabulky řádek, kde první dva sloupce budou v INSERTu a dalších 10 sloupců se samo dopočítá pomocí toho přičtení jedničky k hodnotě předcházejícího řádku.
Všude se řeší jak sčítat sloupce pomocí SUM, ale dvě buňky nad sebou ne.
A kdyby někdo věděl jak na to, jestli by se také rovnou nedalo udělat to, že by to přičítání bylo v rozmezí sloupců 3 až 13. Něco jako ...SET sloupec3 TO sloupec13 = ++1...
tipero
Profil *
Ještě je také možnost načíst si poslední řádek do php proměnné array a s tím pak provést matematické přičtení a nový řádek vložit z této proměnné, ale hezčí řešení mi přijde říct "vem buňku nad a přičti +1" (ovšem jestli to vůbec jde).
Kajman_
Profil *
tipero:
Takze bych ted potreboval neco co mi predtim zkopiruje cely radek do noveho radku a pak se v nem provede to pričtení

Na to můžete použít přímo příkaz insert v syntaxi

insert into tabulka (tady,jsou,sloupce,ktere,se,maji,duplikovat)
select 'hodnota1','hodnota2',sloupce+1, ktere+1,se+1,maji+1,duplikovat+1 from tabulka order by id desc limit 1
tipero
Profil *
To vypadá tak jednoduše, že se tomu ani nechce věřit, že to funguje :-)
Děkuji.
tipero
Profil *
tipero:
Mohu se ještě zeptat, co jsou to ty červené hodnoty 'hodnota1' a 'hodnota'?
panther
Profil
tipero:
co jsou to ty červené hodnoty 'hodnota1' a 'hodnota'?
to nejsou sloupce, ale hodnoty vkládané do prvních dvou sloupců tabulky v Kajmanově příkladu pojmenovaných „tady“ a „jsou“. Zbylé sloupce se duplikují, resp. přičte se k nim jednička.

Kajman ti tak názorně ukázal, že u některých sloupců lze využít stávajících hodnot, ale není to podmínkou pro všechny sloupce v dotazu.
tipero
Profil *
Tak jsem to podle zdejšího návodu dal nějak dohromady a vypadá to takto:
$pricti_jedna = "INSERT INTO $tab ('cislo_0', 'cislo_1') SELECT 'cislo_0'+1, 'cislo_1'+1 FROM $tab ORDER BY ID DESC LIMIT 1";
Jen to nejak nic nepřičítá :-)
Musím tam mít někde nějakou chybku.
tipero
Profil *
Ty apostrofy jsem tam přidal ze zoufalství, ale vůbec to nepomohlo.
tipero
Profil *
Zdá se mi, že tam někde musí být ještě řečeno, že se má vzít hodnota ze řádku (ORDER BY ID DESC LIMIT 1, 1), ale cele to vložit do řádku (ORDER BY ID DESC LIMIT 1)
tipero
Profil *
Tak jsem to nakonec nejak sesmolil. Jen pro ostatni, co by po letech take neco takoveho resili sem davam finalni podobu (take me vzdycky nastve, kdyz nekdo napise "dik, uz jsem na to prisel" a neuvede nic bližšího :-):

$pridej_dalsi_radek = "INSERT INTO $tabulka (id, vstup, cislo_1, cislo_2) SELECT '".$id."', '".$_POST["vstup"]."', cislo_1 + 1, cislo_2 + 1 FROM $tabulka ORDER BY id_spin DESC LIMIT 1";

Takže ještě jednou všem zúčasněným díky. Jakékoli návrhy na vylepšení jsou samozřejmě vítány. :-)

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0