2017-01-13 2 views
1

Iは、テーブルを持っている:MySQL if文を列名に使用するには?

user1_idとuser2_idがスワッピング及びswapped1/swapped2されているユーザーがスワップを肯定時間を表す表す
mysql> DESCRIBE swaps; 
+-------------+----------+------+-----+---------+----------------+ 
| Field  | Type  | Null | Key | Default | Extra   | 
+-------------+----------+------+-----+---------+----------------+ 
| id   | int(11) | NO | PRI | NULL | auto_increment | 
| user1_id | int(11) | NO |  | NULL |    | 
| user2_id | int(11) | NO |  | NULL |    | 
| hasto  | int(11) | NO |  | NULL |    | 
| requested | datetime | NO |  | NULL |    | 
| accepted | datetime | YES |  | NULL |    | 
| swapped1 | datetime | YES |  | NULL |    | 
| swapped2 | datetime | YES |  | NULL |    | 
| rejected | datetime | YES |  | NULL |    | 
| rejected_by | int(11) | YES |  | NULL |    | 
+-------------+----------+------+-----+---------+----------------+ 

。私は両方のスワップを確認したときにスワップを閉じるための仕組みを作る必要があります。

UPDATE swaps SET if(user1_id = ?, swapped1, swapped2) = ? WHERE id=? 

私はこのようなものが必要?マークは現在のユーザー、現在の時刻、swap_idを表します。私が欲しいのは、現在のユーザーがuser1の場合はswapped1に、現在のユーザーがuser2の場合はswapped2に時間を挿入することです。このクエリを実行する

私はエラーを取得する:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'if(user1_id = '3', swapped1, swapped2) = '2017-01-13 07:34:08' WHERE id='3'' at line 1 

私が正しくif文を使用していないことを意味するもの。列名に関するif文を実行する方法はありますか?

あなたが代入の左側に IFを使用することはできませんが、条件付きで両方の列を更新することができ
+0

サンプルを提示してくださいデータとあなたの希望する出力。あなたの 'INSERT'ステートメントは明確ではありません。 –

答えて

0

UPDATE swaps 
    SET swapped1 = IF(user1_id = [current_user], [current_time], swapped1) 
    , swapped2 = IF(user2_id = [current_user], [current_time], swapped2) 
WHERE id = [swap_id]; 
0

あなたは常にこのようuser1_idテストする必要があります:

UPDATE swaps 
    SET 
     swapped1 if(user1_id = 3, '2017-01-13 07:34:08' , swapped1), 
     swapped2 if(user1_id = 3, swapped2, '2017-01-13 07:34:08') 

WHERE id=3; 
関連する問題