Versio

Trigger

Overzicht Reageren

Twan van der Poel

Twan van der Poel

22/07/2009 09:05:00
Quote Anchor link
Beste PHP'ers,

ik heb een view die uit meerdere joins bestaat, te weten; multilan_menuitem.
Als ik een huis tuin en keuken update query afvuur op die view reageert de databank met;

" Error Code : 1393
Can not modify more than one base table through a join view 'engine.multilan_menuitem'

Execution Time : 00:00:00:000
Transfer Time : 00:00:00:000
Total Time : 00:00:00:000 "

nu heb ik met wat onderzoek ontdekt dat men met een trigger een update kwerie wel kan afvuren op de (multi-join) view.

Vermoedelijk is het een kwestie van de relaties aankondigen oid. Anderzijds beschikt de view al over de juiste relaties tot de "echte" tabellen.

Ik heb deze trigger gemaakt, (beetje gestript) maar ik heb even een duwtje in de goede richting nodig.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
delimiter //
create or replace trigger multilan_menuitem_trigger //
    instead of update on multilan_menuitem
    referencing new as new old as old
    begin
        update
            multilan_menuitem
        set
            label = :new.label
        where
            id = :old.mi_id;
    end;
//


( p.s. kan zijn dat ie een beetje verkracht is door testing purposes )
 
PHP hulp

PHP hulp

25/05/2012 16:37:48
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Jelmer rrrr

Jelmer rrrr

22/07/2009 09:59:00
Quote Anchor link
Die trigger is dan in plaats van de UPDATE van de view. Als je view 'multilan_menuitem' heet, dan is het niet logisch de vervangende query ook te laten proberen dezelfde view te laten updaten. In theorie heb je hier zelfs een eeuwige lus te pakken.

Je trigger vervangt de UPDATE query. Of met andere woorden, je mag in je trigger zelf de juiste UPDATE query schrijven die de werkelijke tabellen op basis waarvan de view is opgebouwd bijwerken.
 
Twan van der Poel

Twan van der Poel

22/07/2009 10:02:00
Quote Anchor link
Jelmer, bedankt voor je reactie.

Ten eerste zie ik graag opgemerkt dat ik nieuw ben met triggers (obvious)

Ik heb nu een stored procedure gemaakt die de orginele tabellen bijwerkt, is dat wat je bedoeld met je post, -en zoja, kun je een demo geven van een trigger met een soortgelijke functionaliteit ?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
[sql]
CREATE OR DROP PROCEDURE updateMenuitem(
    $mi_id INT(11),
    $menu_id INT(5),
    $parent_id INT(11),
    $volgorde_nr INT(11),
    $autoOpen INT(11),
    $contentId INT(11),
    $hyperlink CHAR(255),
    $target CHAR(100),
    $taal_id INT(5),
    $label TEXT,
    $titel TEXT,
    $content TEXT
)
BEGIN
    SET @q = concat("
        UPDATE
            content
        SET
            label = '",$label,"',
            titel = '",$titel,"',
            content = '",$content,"'
        WHERE
            taal_id = ",$taalid," AND
            tabel = 'menuitem' AND
            primaire_waarde = ",$mi_id,";
    ");
    PREPARE kwerie FROM @q;
    EXECUTE kwerie;
    DEALLOCATE PREPARE kwerie;
    SET @q = concat("
        UPDATE
            menuitem
        SET
            menu_id = ",$menu_id,",
            parent_id = ",$parent_id,",
            volgorde_nr = ",$volgorde_nr,",
            autoOpen = ",$autoOpen,",
            contentId = ",$contentId,",
            hyperlink = '",$hyperlink,"',
            target = '",$target,"'
        WHERE
            mi_id = ",$mi_id,"
    ");
    PREPARE kwerie FROM @q;
    EXECUTE kwerie;
    DEALLOCATE PREPARE kwerie;
END
[/sql]
 
Wes

wes

22/07/2009 10:06:00
Quote Anchor link
Zie dat je na 3 jaar nog steeds 'kwerie' gebruikt.

I failed :)
 
Twan van der Poel

Twan van der Poel

22/07/2009 10:07:00
Quote Anchor link
query is reserved he ?
die backticks zijn niets voor mij :P
 



Overzicht Reageren

Get Adobe Flash player