Autor Zpráva
Anonymní
Profil *
zdravim, mam tabulku s kategoriemi clanku. v teto tabulce jsou take ulozeny informace o pozici. chtel bych automaticky pri vytvoreni zaznamu ukladat i cislo pozice. snazim se tedy pouzit tento dotaz, ale bohuzel mi nefunguje a hlasi to chybu v syntaxi


INSERT INTO category ( `name`, `position`, `active`, `create`) 

VALUES ('nova kategorie', SELECT IFNULL(MAX(position), 0) + 1 FROM category, 'N', '2007-07-29 14:07:19')
djlj
Profil
INSERT INTO category ( `name`, `position`, `active`, `create`)

VALUES ('nova kategorie', (SELECT IFNULL(MAX(position), 0) + 1 FROM category), 'N', '2007-07-29 14:07:19')
Anonymnía
Profil *
#1093 - You can't specify target table 'category' for update in FROM clause
djlj
Profil
Jaká verze MySQL?
A nebylo by lepší použít auto_increment?
Anonymnía
Profil *
aká verze MySQL?
A nebylo by lepší použít auto_increment?

Pozice se muzou menit a prohazovat a kdyz neco smazu, tak se to precisluje, nehlede na to, ze treba v budoucnu budou kategorie v podkategoriich, takze by auto increment ani pouzit nesel.

verze

MySQL - 4.1.21
ale jak tak na to koukam, tak se mi to zda trochu divny, podle me sem mel na ignumu 5.x a ne 4.1.x
Anonymnía
Profil *
tak sem si tonechap revest na verzi 5.x a stene mi to nejde
Kajman_
Profil *
A co takhle?

INSERT INTO category ( `name`, `position`, `active`, `create`)
SELECT 'nova kategorie', IFNULL(MAX(position), 0) + 1, 'N', '2007-07-29 14:07:19' FROM category

A pokud to taky nepůjde, tak asi u verze 5.x použít trigger before insert, jinak se tomu asi nelíbí, že se zároveň čte a zapisuje do té samé tabulky.
BetaCam
Profil
To co psal Kajman by mělo fungovat. Popřípadě mužes tenhle error obejít tim že do toho tvého dotazu přidáš ještě jeden SELECT tedy zhruba takto

INSERT INTO category ( `name`, `position`, `active`, `create`)
VALUES ('nova kategorie',(SELECT * FROM ( (SELECT IFNULL(MAX(position), 0) + 1 FROM category) ) AS pozice ), 'N', '2007-07-29 14:07:19')
BetaCam
Profil
Pardon omlouvam se za omyl. To v předcházejícim příspěvku by fungovalo ale ten novej select je tam zbytečnej stačí to přejmenovat už v tom původním selectu tedy takhle

INSERT INTO category ( `name`, `position`, `active`, `create`)
VALUES ('nova kategorie',(SELECT IFNULL(MAX(position), 0) + 1 FROM category AS pozice), 'N', '2007-07-29 14:07:19')

btw oproti Kajmanovi verzi bude toto při velkém počtu záznamů s velkou pravděpodobností rychlejší

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:

0