我必须根据来自 2 个不同表的多条记录向表中插入一些记录。
表:
目标:player_list_items
源1:源list_items
2:map_details
玩家应该播放包含项目列表的列表;需要在地图上播放列表。
该地图包含具有特定 X 和 Y 位置的占位符,我需要将 list_items 放在这些占位符后面。为此,我创建了包含随机放置在占位符后面的 list_items 的目标表。
下面是我能够将用户的 list_items 转储到目标表中的查询,但是现在的问题是如何从 source2 表中为每个 list_items 随机获取 X 和 Y 位置。
INSERT INTO player_list_items
(player_list_list_id, player_list_player_id, player_list_item_id, player_list_item_cellX, player_list_item_cellY)
SELECT li.list_item_list_id, 584488596, li.list_item_item_id, 2, 5
FROM list_items li
WHERE li.list_item_list_id = 2
aninsert with multiple selects
或even another query {update}
after 这对我有用,因为这只会为每个列表的用户运行一次。
每个列表包含多个项目,因此上述查询返回多个项目并且工作正常,需要考虑的是 map_details 表还包含多个占位符,它们肯定会超过 list_items 的数量。
所需的查询应该从 map_details 表中获取所有位置 X 和 Y,然后随机分配给每个单独的项目,每个项目的位置必须是唯一的。
我已经看到了插入多个选择的示例,但它们用于单行插入,我的问题是来自多个表的多行并且也是随机的。
I have a Stored Procedure for this case
因为它还有很多其他工作正常的东西,所以,如果这里有人想使用 SP 给出答案,那将是有用的,而不是我使用的问题。
希望以上内容有意义并澄清我的观点。
更新
我的第二个查询:
插入到 player_list_items(player_list_list_id、player_list_player_id、player_list_item_id、player_list_item_cellX、player_list_item_cellY)
SELECT list_item_list_id, 584488596, list_item_item_id, game_map_details.cellX, game_map_details.cellY
FROM list_items
JOIN (SELECT * FROM game_map_details WHERE map_id = 1 ORDER BY RAND()) AS game_map_details
WHERE list_item_list_id = 2
GROUP BY list_item_item_id
这确实添加了 map_details 表中的数据,但数据不是随机的,实际上它只为 list_items 表中的所有 4 条记录插入了一对记录
问候