Hallo tweakers,
Op dit moment heb de volgende tabel voor een klein forum wat ik gebruik:
post_id int(10) NOT NULL auto_increment PK,
topic_id int(10) NOT NULL default '0',
title varchar(250) NOT NULL default '',
message longtext NOT NULL,
poster_id int(10) NOT NULL default '0',
date_time datetime NOT NULL default '0000-00-00 00:00:00',
acl tinyint(1) NOT NULL default '0',
locked tinyint(1) NOT NULL default '0'
Topic_id bevat het ID van het topic waarbij de reactie hoort en als post_id gelijk is aan topic_id is het de firstpost van het topic.
Voor het toevoegen van een nieuw topic gebruik ik de volgende PHP code:
Ik heb dus 2 queries nodig om een nieuw topic aan te maken. De laatste query wil ik schrappen en vervangen door een trigger.
Ik had de volgende trigger in elkaar geknutseld:
Maar dit werkte niet, topic_id bleef 0
.
Na wat speurwerk in de MySQL handleiding kwam ik het volgende tegen:
Ik zal in de trigger op een of andere manier de auto_increment+1 waarde moeten berekenen om deze toe te kennen aan topic_id, maar hoe?
Dit is het deel waar jullie mij wellicht in de goeie richting kunnen duwen
Alvast bedankt
Justin
Op dit moment heb de volgende tabel voor een klein forum wat ik gebruik:
post_id int(10) NOT NULL auto_increment PK,
topic_id int(10) NOT NULL default '0',
title varchar(250) NOT NULL default '',
message longtext NOT NULL,
poster_id int(10) NOT NULL default '0',
date_time datetime NOT NULL default '0000-00-00 00:00:00',
acl tinyint(1) NOT NULL default '0',
locked tinyint(1) NOT NULL default '0'
Topic_id bevat het ID van het topic waarbij de reactie hoort en als post_id gelijk is aan topic_id is het de firstpost van het topic.
Voor het toevoegen van een nieuw topic gebruik ik de volgende PHP code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| $dp->setQuery( "INSERT INTO #__forum ( post_id, title, message, poster_id, date_time, acl, locked ) VALUES ( '', " . $dp->quotedMysqlSafe( $sTitle ) . ", " . $dp->quotedMysqlSafe( $sMessage ) . ", " . $dp->mysqlSafe( getSuperGlobalValue( $_SESSION, 'iUserID' ) ) . ", NOW(), " . $dp->mysqlSafe( getSuperGlobalValue( $_SESSION, 'iUserAcl' ) ) . ", 0 ) "); $dp->query(); // Make topic_id equal to post_id $iTopicId = $dp->getInsertedId(); $dp->setQuery( "UPDATE #__forum SET topic_id = " . $iTopicId . " WHERE post_id = " . $iTopicId ); $dp->query(); |
Ik heb dus 2 queries nodig om een nieuw topic aan te maken. De laatste query wil ik schrappen en vervangen door een trigger.
Ik had de volgende trigger in elkaar geknutseld:
SQL:
1
2
3
4
5
6
7
8
9
10
| CREATE TRIGGER trigger_name BEFORE INSERT ON table_name FOR EACH ROW BEGIN IF ( NEW.topic_id = 0 ) THEN SET NEW.topic_id = NEW.post_id; END IF; END; |
Maar dit werkte niet, topic_id bleef 0
Na wat speurwerk in de MySQL handleiding kwam ik het volgende tegen:
Wat verklaart waarom het niet werkte.In a BEFORE trigger, the NEW value for an AUTO_INCREMENT column is 0, not the automatically generated sequence number that will be generated when the new record actually is inserted.
Ik zal in de trigger op een of andere manier de auto_increment+1 waarde moeten berekenen om deze toe te kennen aan topic_id, maar hoe?
Dit is het deel waar jullie mij wellicht in de goeie richting kunnen duwen
Alvast bedankt
Justin