Reputation: 155
I have two unrelated tables tbl_A & tbl_B
tbl_A
+----+---------------------+------+
| id | url | slug |
+----+---------------------+------+
| 1 | http://example.com/ | 3qqd |
| 2 | http://example.com/ | t8af |
| 3 | http://example.com/ | sjim |
| 4 | http://example.com/ | awfo |
| 5 | http://example.com/ | 6myy |
+----+---------------------+------+
tbl_A description:
+---------------------+---------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+---------------------+------+-----+---------------------+----------------+
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| url | text | YES | | NULL | |
| slug | varchar(255) | YES | MUL | NULL | |
+---------------------+---------------------+------+-----+---------------------+----------------+
and another table :
tbl_B
+----+---------------------+---------------------+------+
| ID | user_name | url | slug |
+----+---------------------+---------------------+------+
| 1 | john.reese | NULL | NULL |
+----+---------------------+---------------------+------+
tbl_B description :
+---------------------+---------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+---------------------+------+-----+---------------------+----------------+
| ID | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| user_name | varchar(60) | NO | MUL | | |
| url | text | YES | | NULL | |
| slug | varchar(255) | YES | MUL | NULL | |
+---------------------+---------------------+------+-----+---------------------+----------------+
tbl_A.id is unrelated to tbl_B.ID.
tbl_B.ID is userID field and gets filled up dnamically when a new user registers. So that tbl_B.ID gets a row inserted automatically as a user register, tbl_B.ID value gets auto incremented.
tbl_A on the other hand already exists with all the details.
What I want to achieve: whenever a new user registers and userID is INSERT into tbl_B.ID, at the same time it should trigger an update of tbl_B.user and tbl_B.slug with the values taken from tbl_A.user and tbl_A.slug.
Outcome: After ID 1 is added
+----+---------------------+---------------------+------+
| ID | user_name | url | slug |
+----+---------------------+---------------------+------+
| 1 | john.reese | http://example.com/ | 3qqd |
+----+---------------------+---------------------+------+
Hope I am able to explain. I was trying to use triggers but got lost, am a newbie with mysql, please bear with me.
drop trigger if exists bi_tbl_B $$
delimiter $$
create trigger bi_tbl_B before insert on tbl_B
for each row begin
UPDATE tbl_B
SET url = url +
(SELECT url
FROM tbl_A
WHERE id = NEW.id)
WHERE ID = NEW.ID;
end;
$$
delimiter ;
I don't know whether this is even possible or should I try the other way round.
Add a field user_id
in tbl_A and AFTER INSERT
on tbl_B update tabl_A.user_id column with the userID from tbl_B.ID
I am open to suggestions, if not trigger then procedures.
Upvotes: 0
Views: 1072
Reputation: 34304
It is possible to do it, just not the way you are trying. In the before insert trigger you can change the values being inserted by changing the NEW.field_name
variables.
drop trigger if exists bi_tbl_B $$
delimiter $$
create trigger bi_tbl_B before insert on tbl_B
for each row begin
DECLARE v_slug as varchar(255);
DECLARE v_url as text;
SELECT url, slug INTO v_url, v_slug FROM tbl_A WHERE id = NEW.id;
NEW.url=v_url;
NEW.slug=v_slug;
end;
$$
delimiter ;
Upvotes: 1