Mysql:为每个用户插入包含默认新数据的行

时间:2013-10-05 20:55:39

标签: mysql

感谢狡猾(对我来说)查询的帮助。我非常喜欢mysql初学者。

表(v3_community_fields_values)包含以下列:

  • id(行的唯一ID,自动增量)
  • user_id(用户的ID)
  • field_id(字段类型的ID)
  • 值(值的值) ())
  • 访问

我一直在摸不着如何编写一个为每个用户插入一行的查询: a)没有这样的行已经存在,并且 b)存在另一个用户行,[field_id]为45(45 =用户配置文件类型),值为5或6

新行应包含:[id],[user_id],'75','foobar'

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

这样做(测试过):

insert into v3_community_fields_values
    (user_id, field_id, value)
select user_id, 75, 'foo'
from v3_community_fields_values
where field_id = 45
and value in ('5', '6')
and user_id not in (
select user_id
from v3_community_fields_values
where field_id = 75)

请参阅SQLFiddle上的live demo

答案 1 :(得分:0)

我不知道如何使用一个sql语句实现,但这个存储过程可能有所帮助:

delimiter //
drop procedure if exists insert_something//
create procedure insert_something ()
begin
    DECLARE v_user_id int default 0;
    DECLARE stop int default 0;
    DECLARE cursor1 CURSOR FOR select DISTINCT user_id from v3_community_fields_values where field_id = 45;    
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET stop=1;
    OPEN cursor1;
    FETCH cursor1 INTO v_user_id;
    while stop <> 1 do
        insert into v3_community_fields_values (user_id, field_id, `value`) values (v_user_id, '75', 'foobar');
        FETCH cursor1 INTO v_user_id;
    end while;
    CLOSE cursor1;
end //
call insert_something()//