0

我正在编写一个脚本来自动将车辆放置或“生成”到在线游戏(“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 方法,我不确定如何在添加另一辆车之前检查该位置是否已经存在。

4

2 回答 2

1

确保首先在表中设置车辆类型的唯一键(否则重复键子句无用)

create unique index vehicle_typekey on vehicle_location(location);

然后您可以使用单个插入语句来插入或更新

insert into vehicle_location select v.location, v.vehicle_type 
FROM vehicles_to_add v on duplicate key update vehicle_type=v.vehicle_type;
于 2013-06-06T14:25:25.430 回答
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
于 2013-06-06T14:08:36.087 回答