Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于关系MYSQL插入行_Mysql_Insert - Fatal编程技术网

基于关系MYSQL插入行

基于关系MYSQL插入行,mysql,insert,Mysql,Insert,我的mysql数据库中有以下场景。2个表: 待办事项 待办事项 待办事项 待办事项同步控制器 待办事项同步id 设备id 应该删除吗 删除了吗 待办事项 如您所见,从todoitems到todo_sync_控制器之间存在一对多关系 我使用php脚本与服务器通信。每次从设备提取todo项时,我都需要确保该设备和todo项都有todo\u sync\u控制器条目。如果缺少,则应创建它 解决这个问题的一种方法是从我的php脚本中使用循环和多个查询,但我想知道是否可以使用单个插入查询来实现这一点

我的mysql数据库中有以下场景。2个表:

待办事项

  • 待办事项
  • 待办事项
待办事项同步控制器

  • 待办事项同步id
  • 设备id
  • 应该删除吗
  • 删除了吗
  • 待办事项
如您所见,从todoitems到todo_sync_控制器之间存在一对多关系

我使用php脚本与服务器通信。每次从设备提取todo项时,我都需要确保该设备和todo项都有todo\u sync\u控制器条目。如果缺少,则应创建它


解决这个问题的一种方法是从我的php脚本中使用循环和多个查询,但我想知道是否可以使用单个插入查询来实现这一点?有什么想法吗?

您的解决方案非常简单,只需在todo\u sync\u controllers表中为todo\u id和device\u id创建唯一键,这样当您从脚本向表中插入时,它将检查唯一约束,如果它不存在,将插入数据,否则将被mysql错误忽略以进行查询。如果您想检查您的数据是否因为重复键而被插入或忽略,您需要在进行查询时应用If条件,如果返回true,则表示插入已完成,否则将被系统忽略。这将像下面的代码一样完成

if(mysql_query($sql_query)){
    echo "your data inserted";
}else{
    echo "data already exist";
}
把你的桌子改成

create unique index on todo_sync_controllers (todo_id ,device_id)

为什么不创建一个设备id和todo id的唯一键,然后每次都执行insert查询呢?只有第一次查询才会成功。所以基本上,如果存在其他明智的insert,您希望选择数据。@somnath:insert语句看起来如何?这是否意味着我仍然需要遍历所有todoitems并对每个todo_id执行插入查询?@PrashantShukla:我不需要选择todo_sync_控制器,我只想在该设备id和todoitem不存在时插入它。