Autor Zpráva
Dotazak
Profil *
Ahoj,
mám INSERT dotaz který vkládá hodnotu do tabulky, která se skládá ze sloupce auto_increment id a sloupců jmeno a cislo

dotaz:

INSERT INTO autori values(0, 'tonda', this_id);


Chtěl bych aby se mi do třetího sloupce (this_id) vložilo automaticky id které se použije pro sloupec id s auto_incrementem..

tedy něco jako mysql_insert_id() v php, ale abych to mohl použít už přímo v tom insert dotazu ..

Momentálně to mám řešené tak, že používám druhý dotaz (select) před tím insert dotazem, kde si zjistím poslední vložené id a přičtu k němu jedničku..
Jenže mít to rozdělené do dvou dotazů je škaredé..

díky za rady
xmark
Profil
Dotazak:
Chtěl bych aby se mi do třetího sloupce (this_id) vložilo automaticky id které se použije pro sloupec id

Mohl bys naznačit důvod?
__construct
Profil
Dalo by sa to takýmto poddotazom:
SELECT `auto_increment` FROM `information_schema`.`tables` WHERE `table_schema` = 'db' AND `table_name` = 'tbl';
Ale ako už xmark naznačil je to blbosť…
Dotazak
Profil *
xmark:
Chtěl bych aby se mi do třetího sloupce (this_id) vložilo automaticky id které se použije pro sloupec id

Potřebuju to jako část soli pro ukládání hesla do db přes sha1


Klasickou subquery sem zkoušel INSERT into tabulka values(0, 'tonda', (SELECT FROM...))

ale mysql vracelo error, asi subquery nemůže být ve values.. nevím
Kajman_
Profil *
Dotazak:
Osobně bych použil dva dotazy, insert, update.

Ale jde to i jedním
http://diskuse.jakpsatweb.cz/?action=vthread&forum=28&topic=90532
Dotazak
Profil *
o kolik je insert & update lepší než select & insert? Míň to zatěžuje db, nebo je to nějak znatelně rychlejší?
Keeehi
Profil
Dotazak:
Mezi select & insert se může vloudit select z jiného požadavku a problém je na světě.
xmark
Profil
Dotazak:
Potřebuju to jako část soli pro ukládání hesla do db přes sha1

Já jsem to pořád ještě nepochopil.
Původně jsem myslel, že chceš ten sloupec kvůli uložení pořadí v nějakých výpisech, tzn. při vložení dáš stejnou hodnotu jako ID a pak ji budeš chtít měnit. To by nebyla nejlepší technika, ale dalo by se o tom diskutovat. Ale jestli tam chceš mít stejnou hodnotu jako v ID, tak je to prostě nesmysl.
Joker
Profil
xmark:
Já jsem to pořád ještě nepochopil.
Předpokládám má aplikaci, kde hash = sha1(heslo + ID uživatele)
Takže při založení nového uživatele potřebuje vědět jaké bude mít ID, aby se mohl vytvořit hash hesla.

Keeehi:
Mezi select & insert se může vloudit select z jiného požadavku a problém je na světě.
Právě z toho důvodu jsem kdysi vymyslel to co odkázal Kajman, kde to je v jediném INSERT-SELECT dotazu.
Kalda
Profil
Joker: Sám u toho původního vlákna uvádíš, že to pro jistotu provádíš v transakci ;)
Dotazak
Profil *
Nakonec sem se tedy rozhodl že použiju dva dotazy, jeden bude INSERT a druhý UPDATE... (kde id vytáhnu z mysql_insert_id())
kdybych použil SELECT max(id) a INSERT, tak pokud by někdo smazal poslední vložený záznam z tabulky, tak by se mi vrátilo sice největší id ale auto_increment by vložil jiné, (protože se pořád zvětšuje a nenavazuje na poslední největší)í, a vznikl by problém.. s update se alespoň vyhnu nutnosti sahání do information.schema.

Je toto dobré řešení?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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