1

感谢您对一个棘手的(对我而言)查询的帮助。我是一个 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'

非常感谢您的帮助。

4

2 回答 2

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 上的现场演示

于 2013-10-06T00:08:11.177 回答
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()//
于 2013-10-05T21:45:42.680 回答