我正在制作一个脚本,以自动将车辆放置或“生成”到在线游戏(“DayZ”)中。我有一个表格,其中包含我想要添加到游戏世界的位置和车辆类型,但是我需要确保在要插入的位置不存在车辆。如果确实如此,我会跳过在该位置插入新车辆。
最初我打算收集所有要添加的位置和车辆的记录集,然后循环遍历每个位置以确定该位置是否已被占用。
$sql = "SELECT location, vehicle_type from vehicles_to_add";
foreach ($conn->query($sql) as $row)
{
// Query the database to see if $row['location'] already exists
// in the vehicle_location table
if EXISTS then
Do not add
else
Add vehicle and location to the vehicle_location table
}
然而,在看了一些例子之后,我想知道是否可以通过SQL完成某些事情。例如......可能类似于:
INSERT INTO vehicle_location
SELECT location, vehicle_type FROM vehicles_to_add
使用SQL的好处是我可以在数据库中创建一个自己运行的事件。但是,使用此SQL ONLY方法我不确定如何在添加其他车辆之前检查该位置是否已存在。
答案 0 :(得分:1)
确保首先在表格中设置车辆类型的唯一键(否则重复键子句无效)
create unique index vehicle_typekey on vehicle_location(location);
然后您可以使用单个insert语句来插入或更新
insert into vehicle_location select v.location, v.vehicle_type
FROM vehicles_to_add v on duplicate key update vehicle_type=v.vehicle_type;
答案 1 :(得分:0)
我认为您可以在查询中使用ON DUPLICATE KEY UPDATE
INSERT INTO vehicle_location (a,b) SELECT v.location, v.vehicle_type FROM vehicles_to_add v
ON DUPLICATE KEY UPDATE a=v.location; --you can add here to update any columns