2015-11-14 2 views
0

Здравствуйте, я хочу связать это с одним запросом с помощью JOIN. Как это работает:Как использовать JOIN в UPDATE mysql query

Db::bind("uid", strip_tags($userid)); 
DB::bind("user_id", strip_tags($refer)); 
Db::bind("points_earn", strip_tags($points_earn)); 
Db::bind("points_refer", strip_tags($points_refer)); 
Db::query("UPDATE referrals SET `points_earn` = :points_earn WHERE new_id = :uid"); 
Db::query("UPDATE users SET `points` = `points` + :points_refer WHERE id = :user_id"); 

То, что я думаю, но не работает.

Db::query("UPDATE referrals r JOIN users u ON r.user_id = u.id SET `r.points_earn` = :points_earn WHERE r.new_id = :uid AND `u.points` = `u.points` + :points_refer WHERE u.id = :user_id"); 

У кого-нибудь есть решение?

ответ

1

Ваш синтаксис является правильным, но задними тиками являются неправильными, и каждым SELECT имеет только один WHERE:

UPDATE referrals r JOIN 
     users u 
     ON r.user_id = u.id 
    SET r.points_earn = :points_earn 
    WHERE r.new_id = :uid AND u.points = u.points + :points_refer AND 
     u.id = :user_id; 

Проблема с обратными кавычками, что следующие весьма различны:

`r.points_earn` 
`r`.`points_earn` 

сначала относится к столбцу под названием «r.points_earn». Второй относится к столбцу «points_earn» в «r». Обратные ссылки не нужны, поэтому вы можете просто удалить их.

+0

спасибо за быстрый ответ, и они знают, что с «u.points = u.points +: points_refer AND u.id =: user_id;» u.id =: user_id означает WHERE? потому что пришлось менять точки, где u.id =: user_id – Stadoo