Reputation: 141
Good morning, I tell them my situation: I have two tables:
RATINGS:
GUIDE varchar(7)
USER varchar(20)
PRETEST decimal(4,3)
POSTEST decimal(4,3)
RATINGS_PERGUIDE:
USER varchar(20)
GUIDE1_PRETEST decimal(4,3)
GUIDE1_POSTEST decimal(4,3)
GUIDE2_PRETEST decimal(4,3)
GUIDE2_POSTEST decimal(4,3)3
.
.
.
GUIDE20_PRETEST decimal(4,3)
GUIDE20_POSTEST decimal(4,3)
Table "RATINGS" has a form for entering the information, I need to move the information entered to the table "RATINGS_PERGUIDE", i try this:
UPDATE RATINGS , RATINGS_PERGUIDE
IF RATINGS.USER = RATINGS_PERGUIDE.USER AND RATINGS.GUIDE = 'GUIDE 1'
THEN
SET RATINGS_PERGUIDE.GUIDE1_PRETEST = RATINGS.PRETEST
SET RATINGS_PERGUIDE.GUIDE1_POSTEST = RATINGS.POSTEST
ELSE IF RATINGS.USER = RATINGS_PERGUIDE.USER AND RATINGS.GUIDE = 'GUIDE 2'
THEN
SET RATINGS_PERGUIDE.GUIDE2_PRETEST = RATINGS.PRETEST;
SET RATINGS_PERGUIDE.GUIDE2_POSTEST = RATINGS.POSTEST;
.
.
.
END IF
But doesn't work
ie, according to the "GUIDE" entered in the table "RATINGS" update the corresponding column in the table "RATINGS_PERGUIDE" (24 "GUIDES" different)
Likewise, if it can be done in a trigger for each new record inserted into the table "RATINGS" would be much better
Please Help
Upvotes: 0
Views: 78
Reputation: 141
I have found the solution by simply observing the structure of "Update" in Phpmyadmin
UPDATE RATINGS , RATINGS_PERGUIDE
SET RATINGS_PERGUIDE.GUIDE1_PRETEST = (CASE WHEN RATINGS.GUIDE = 'GUIDE 1' THEN RATINGS.PRETEST ELSE RATINGS_PERGUIDE.GUIDE1_PRETEST END),
RATINGS_PERGUIDE.GUIDE1_POSTEST = (CASE WHEN RATINGS.GUIDE = 'GUIDE 1' THEN RATINGS.PRETEST ELSE RATINGS_PERGUIDE.GUIDE1_POSTEST END),
RATINGS_PERGUIDE.GUIDE2_PRETEST = (CASE WHEN RATINGS.GUIDE = 'GUIDE 2' THEN RATINGS.PRETEST ELSE RATINGS_PERGUIDE.GUIDE2_PRETEST END),
RATINGS_PERGUIDE.GUIDE2_POSTEST = (CASE WHEN RATINGS.GUIDE = 'GUIDE 2' THEN RATINGS.PRETEST ELSE RATINGS_PERGUIDE.GUIDE2_POSTEST END),
. . . .
WHERE RATINGS.USER = RATINGS_PERGUIDE.USER
And this work for me, I put it in a stored procedure and then call with a trigger
Thanks to All and to Gordon Linoff
Upvotes: 0
Reputation: 1269623
You are trying to do a pivot in an update
and that is a little complicated. One way is to simply do multiple updates:
update RATINGS_PERGUIDE join
RATINGS
on RATINGS.USER = RATINGS_PERGUIDE.USER and
RATINGS.GUIDE = 'GUIDE 1'
SET RATINGS_PERGUIDE.GUIDE1_PRETEST = RATINGS.PRETEST,
RATINGS_PERGUIDE.GUIDE1_POSTEST = RATINGS.POSTEST;
Modify and repeat this update for each of the guides.
If you really want to do this in a single query:
update RATINGS_PERGUIDE join
(select r.user,
max(case when r.GUIDE = 'GUIDE 1' then pretest end) as pretest_guide1,
max(case when r.GUIDE = 'GUIDE 1' then posttest end) as posttest_guide1,
max(case when r.GUIDE = 'GUIDE 2' then pretest end) as pretest_guide2,
max(case when r.GUIDE = 'GUIDE 2' then posttest end) as posttest_guide2,
. . .
from RATINGS r
group by r.user
) r
on r.USER = RATINGS_PERGUIDE.USER
SET RATINGS_PERGUIDE.GUIDE1_PRETEST = r.pretest_guide1,
RATINGS_PERGUIDE.GUIDE1_POSTEST = r.posttest_guide1,
RATINGS_PERGUIDE.GUIDE2_PRETEST = r.pretest_guide2,
RATINGS_PERGUIDE.GUIDE2_POSTEST = r.posttest_guide2,
. . .
Upvotes: 1