Odkazy: dibi | API reference

Forum: [česky] [english]

dibi fórum

tiny ‘n’ smart
database layer

Nejste přihlášen(a)

#1 před 2 lety

LastHunter
Moderator
Registrovaný: 8. 1. 2009
Příspěvky: 1621

Jak na INSERT SELECT?

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)

 

#2 před 2 lety

phx
Moderator
Registrovaný: 17. 4. 2008
Příspěvky: 878

Re: Jak na INSERT SELECT?

Priprav si onen select a pak to predhod insertu jako subdotaz.

 

#3 před 2 lety

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5548

Re: Jak na INSERT SELECT?

Trošku OT: dej pozor, abys pro sloupec user_agent měl nastaven typ binary.

 

#4 před 2 lety

phx
Moderator
Registrovaný: 17. 4. 2008
Příspěvky: 878

Re: Jak na INSERT SELECT?

Binary? User_agent muze obsahovat binarni data? Ja myslel ze to je proste text (podpis prohlizece).

 

Zápatí