【发布时间】:2019-01-24 06:59:50
【问题描述】:
我想用 users 表中的 user_id 和 reps 表中他们没有使用代表的随机 rep_id 填充一个新表,否则他们希望分配他们拥有的代表的 rep_id用过的。我为 user_id 和 rep_id 设置了外键,两者都可以为空,但 user_id 也是主键。
我可以做这样的事情来选择user_id 和rep_id 修补程序没有问题...
$active_rep_array = DB::table('reps')
->where('active',1)
->pluck('id');
$array_length = count($active_rep_array);
$active_reps = '\'' . implode('\',\'', $active_rep_array->all()) . '\'';
$users = DB::select("
SELECT users.id AS user_id,
COALESCE(rs.rep_id,elt(floor(rand() * $array_length + 1), $active_reps ),0) AS rep_id
FROM users
LEFT JOIN rep_sessions rs ON users.id=rs.user_id");
但我想同时将此数据插入到新创建的表中。到目前为止我有这个(而不是$users 查询)......
DB::insert("
INSERT INTO user_registration_meta (user_id,rep_id)
SELECT users.id AS user_id,
COALESCE(rs.rep_id,elt(floor(rand() * $array_length + 1), $active_reps ),0) AS rep_id
FROM users
LEFT JOIN rep_sessions rs ON users.id=rs.user_id");
这在修补程序中给了我这个错误......
Illuminate/Database/QueryException with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '9952085' for key 'PRIMARY'
这是user_registration_meta 表...
+---------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+------------------+------+-----+---------+-------+
| user_id | int(10) unsigned | NO | PRI | NULL | |
| rep_id | int(10) unsigned | YES | MUL | NULL | |
+---------+------------------+------+-----+---------+-------+
我在mysql和ALTER TABLE user_registration_meta AUTO_INCREMENT = 1;中截断了
任何想法为什么会出现这个错误?
【问题讨论】:
-
那么,您只希望一个用户存在一行?您正在使用
rep_sessions表来检查他们以前是否使用过代表?如果没有,你只是添加一个随机的? -
没错。一个用户可以有多个会话,但我们只是在寻找一个 rep_id。啊,这可能是问题所在!
-
你迷路了,当你说用户可以拥有多个会话时,这是否意味着他们可以在
user_registration_meta表中拥有不止一行,或者您只是指rep_sessions表吗? -
对不起。您在原始评论中的想法是正确的。 rep_sessions 表中每个用户可以有不止一行,但 user_registration_meta 表中每个用户只能有一行。我想你已经解决了这个问题。如果您想将其作为答案,我会接受。谢谢。
-
我很高兴能帮上忙,但老实说,我不确定答案是什么 :)
标签: php mysql sql laravel foreign-keys