2017-06-28 18 views
0

tb_usermetaを更新するには、meta_idmeta_key'smeta_value'sの1つのクエリを使用します。これは可能ですか?値に基づいてMysqlを更新し、クエリを選択

tb_usermeta:

+----+---------+-----------+------------+ 
| id | meta_id | meta_key | meta_value | 
+----+---------+-----------+------------+ 
| 1 |  1 | user_nome | user 1  | 
| 2 |  1 | user_fone | 99999  | 
| 3 |  2 | user_nome | user 2  | 
| 4 |  2 | user_fone | 88888  | 
+----+---------+-----------+------------+ 

例:データ:
meta_id = 1、meta_key = user_nome、meta_value =ユーザが後
meta_id = 1、meta_key = user_fone、meta_value = 696969

tb_usermetaを変更しました更新:

+----+---------+-----------+-------------+ 
| id | meta_id | meta_key | meta_value | 
+----+---------+-----------+-------------+ 
| 1 |  1 | user_nome | user changed| 
| 2 |  1 | user_fone | 696969  | 
| 3 |  2 | user_nome | user 2  | 
| 4 |  2 | user_fone | 88888  | 
+----+---------+-----------+-------------+ 

答えて

1

次を考慮してください...

DROP TABLE IF EXISTS eav; 

CREATE TABLE eav 
(entity INT NOT NULL 
,attribute VARCHAR(12) NOT NULL 
,value VARCHAR(20) NOT NULL 
,PRIMARY KEY(entity,attribute) 
); 

INSERT INTO eav VALUES 
(1,'user_nome','user 1'), 
(1,'user_fone','99999'), 
(2,'user_nome','user 2'), 
(2,'user_fone','88888'); 

UPDATE eav 
    SET value = CASE attribute WHEN 'user_nome' THEN 'user changed' 
           WHEN 'user_fone' THEN '696969' 
           END 
WHERE entity = 1; 

SELECT * FROM eav; 
+--------+-----------+--------------+ 
| entity | attribute | value  | 
+--------+-----------+--------------+ 
|  1 | user_nome | user changed | 
|  1 | user_fone | 696969  | 
|  2 | user_nome | user 2  | 
|  2 | user_fone | 88888  | 
+--------+-----------+--------------+ 

ビューでこれを行うといいですが、MySQLでは、2つのものを同時に複数の「基礎となるテーブルへの更新」を更新していると考えていると思います。

+0

助けてくれてありがとう! –

関連する問題