【问题标题】:INSERT row based on relationship MYSQL根据关系 MYSQL 插入行
【发布时间】:2013-03-23 15:17:34
【问题描述】:

我的 mysql 数据库中有以下场景。 2张桌子:

待办事项

  • todo_id
  • todo_title

todo_sync_controllers

  • todo_sync_id
  • device_id
  • 应该删除
  • is_deleted
  • todo_id

如您所见,从 todoitems 到 todo_sync_controllers 是一对多的关系。

我使用 php 脚本与服务器通信。每次我从设备中提取待办事项时,我都需要确保该设备和待办事项有一个 todo_sync_controller 条目。如果缺少,则应创建它。

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

【问题讨论】:

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

标签: mysql insert


【解决方案1】:

您的解决方案非常简单,只需在 todo_sync_controllers 表中为 todo_id 和 device_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)

【讨论】:

    猜你喜欢
    • 2012-12-21
    • 2021-10-02
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 2015-07-06
    • 2011-03-14
    • 2015-05-18
    • 1970-01-01
    相关资源
    最近更新 更多