0

I am very new to mysql, and I want to ask for help about creating Trigger.

I have two tables UserTable and ProductTable Table 1 UserTable, with two column: UserID Rating

Table2 Product Table, with three column: Product ID, UserID, Rating.

Whenever a new row is created in ProductTable, a new product ID is given, and userID will be updated based on which user created the row.

For Product Table's Rating, I want it to refer to the value in Rating in UserTable where UserID in both tables are the same.

But I am not sure how to do it, will anyone kindly help me? I think using Trigger is the way to do, please correct me if I am incorrect.

CREATE TRIGGER Add Rating
AFTER INSERT ON ProductTable
BEGIN
    INSERT INTO ProductTable(rating) 
    VALUES (UserTable.rating)
    Where ProductTable.UserID = UserTable.UserID;
End
0

I would caution against using triggers where you should be using other methods. Triggers are nice for temporary fixes when you can't fix the application or database structure right away, but if you use them as an permanent and integral part of the workflow, things become confusing.

You table structure doesn't seem right. Instead I'd suggest:

product:

  • product_id (primary key)
  • other columns for the product

user:

  • user_id (primary key)
  • other columns for the user

product_rating:

  • product_id (foreign key to product table)
  • user_id (foreign key to user table)
  • rating
  • (product_id, user_id) is a composite primary key

This table structure makes the trigger unnecessary, and it also allows more than one rating for each product. If you want to allow a certain user to rate a certain product more than once, then you need a special column to be the primary key as in the other tables, call it e.g. product_rating_id.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.