Autor | Zpráva | ||
---|---|---|---|
Anonymní Profil * |
#1 · Zasláno: 29. 7. 2007, 14:15:13
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`) |
||
djlj Profil |
#2 · Zasláno: 29. 7. 2007, 14:22:39
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 * |
#3 · Zasláno: 29. 7. 2007, 14:34:04
#1093 - You can't specify target table 'category' for update in FROM clause
|
||
djlj Profil |
#4 · Zasláno: 29. 7. 2007, 14:41:29
Jaká verze MySQL?
A nebylo by lepší použít auto_increment? |
||
Anonymnía Profil * |
#5 · Zasláno: 29. 7. 2007, 14:45:43
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.21ale 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 * |
#6 · Zasláno: 30. 7. 2007, 14:26:14
tak sem si tonechap revest na verzi 5.x a stene mi to nejde
|
||
Kajman_ Profil * |
#7 · Zasláno: 30. 7. 2007, 15:43:24
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 |
#8 · Zasláno: 30. 7. 2007, 22:58:02
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 |
#9 · Zasláno: 30. 7. 2007, 23:04:55 · Upravil/a: BetaCam
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ší |
||
Časová prodleva: 17 let
|
0