我想用 user_id
从users表和reps表中的一个随机rep\u id,在reps表中他们没有使用rep,否则他们希望被分配 rep_id
他们使用的代表。我为user\u id和rep\u id设置了外键,它们都可以为null,但是user\u 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");
这给了我一个关于修补匠的错误。。。
带有消息“sqlstate[23000]”的/database/queryexception:完整性约束冲突:键“primary”的1062重复条目“9952085”
这就是 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;
你知道为什么会出现这样的错误吗?
2条答案
按热度按时间n53p2ov01#
您可以通过添加模式来修复该错误,只有这些模式将被启用。
您可以在此处阅读有关模式的更多信息:
https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html
bfhwhh0e2#
万一有人无意中发现这个,它对任何人都有用。。。正如@ross wilson所说,我选择了多个
rep_id
中的每个用户SELECT
sql的一部分,这就是我出错的原因。最后我不得不用GROUP BY
确保只有最后一个rep_id
正在使用,因此每个用户只会被插入到表中一次。