Oznámení
Omlouváme se, provoz fóra byl ukončen
Jak na INSERT SELECT?
Upozornění: Tohle vlákno je hodně staré.
před 10 lety
- LastHunter
- Člen | 1539
Ahoj,
potřeboval bych v dibi nějak složit dotaz pro vložení nového záznamu
při traverzování kolem stromu, jak radí Jakub Vrána.
A neumím zkrátka složit dotaz pro INSERT SELECT, který vypadá takto:
INSERT INTO strom (lft, rgt, hloubka)
SELECT IFNULL(MAX(rgt), 0) + 1,
IFNULL(MAX(rgt), 0) + 2,
0
FROM strom
Rád bych využil featury dibi, tzn. pole apod., jasně, že můžu zřetězit řetězce, ale to nechci…
Tohle mi nefunguje:
$request = Environment::getHttpRequest();
$this->db->test('INSERT INTO [::' . self::POSTS_TABLE . ']', array(
'lft%sql' => 'SELECT IFNULL(MAX(rgt), 0) + 1',
'rgt%sql' => 'IFNULL(MAX(rgt), 0) + 2',
'level' => 0,
'primary_id' => $this->primaryId,
'table' => $this->table,
'user_id' => $name==NULL ? $user->id : NULL,
'username' => $name==NULL ? $user->name : $name,
'ip_address' => $request->getRemoteAddress(),
'user_agent' => $request->getHeader('user-agent'),
'time' => time(),
'text' => $text,
), '%sql', 'FROM [::' . self::POSTS_TABLE . ']');
Vygeneruje něco takového:
INSERT INTO `trance_posts` (
SELECT IFNULL(MAX(rgt), 0) + 1, IFNULL(MAX(rgt), 0) + 2, 0, '2', 'articles', NULL, 'sdasd',
'127.0.0.1', 'Mozilla/5.0 (Windows; U; Windows NT 6.1; cs; rv:1.9.1.3) Gecko/20090824
Firefox/3.5.3', 1256282379, 'asdasdasdasdasdas')
FROM `trance_posts`
Editoval LastHunter (23. 10. 2009 9:21)
před 10 lety
- phx
- Člen | 652
Priprav si onen select a pak to predhod insertu jako subdotaz.
před 10 lety
- David Grudl
- Nette Core | 6806
Trošku OT: dej pozor, abys pro sloupec user_agent měl nastaven typ binary.
před 10 lety
- phx
- Člen | 652
Binary? User_agent muze obsahovat binarni data? Ja myslel ze to je proste text (podpis prohlizece).