首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在添加记录之前检查其他表中是否存在外键

如何在添加记录之前检查其他表中是否存在外键
EN

Stack Overflow用户
提问于 2016-11-11 15:06:41
回答 1查看 2.4K关注 0票数 1

我知道有些问题的答案听起来是一样的,但我已经核对过了,我什么也回答不了我的问题。

我有一个菜谱表,其中有"chef_id“和"category_id”列。然后我有一个厨师表,其中有"id“和"name”列,还有类别表,还有"id“和"name”列。

当我插入一个新的食谱,我必须添加chef_id和category_id,他们需要已经存在,否则,它应该告诉我添加厨师和新类别之前,我添加食谱。

我该怎么去哪里查呢?我正在使用SQL。到目前为止,这就是我所得到的:

functions.php

代码语言:javascript
运行
复制
function add_recipe($name =':name', 
                   $categories_id=':categories_id',
                   $chef_id=':chef_id') {

         include 'db_connection.php';
    try {
        $sql = "INSERT INTO recipes(name, categories_id, chef_id) "
            . "VALUES (:name, :categories_id, :chef_id)";


        if(chef_id and category_id exist) {
            then execute the query;
        }

        $results = $conn->prepare($sql);
        $results->bindParam(':name', $name, PDO::PARAM_STR, 100);
        $results->bindParam(':categories_id', $categories_id, PDO::PARAM_INT);  
        $results->bindParam(':chef_id', $chef_id, PDO::PARAM_INT);   

    if($results->execute()) {
      echo '1 row has been inserted';  
    }

    $conn = null;

    } catch(PDOException $e) {
        echo 'Error: ' . $e->getMessage() . '<br />';
        return false;
    }
  return true;

}

我唯一能想到的是SQL检查约束.但我希望不是因为我发现安静很难理解它是如何工作的.

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-11 15:13:48

您可以在MySql中创建一个存储过程,以避免多次往返检查数据库。

我要用伪码,因为现在在电话里:

代码语言:javascript
运行
复制
  CREATE FUNCTION create_receipt(p_name, p_chef, p_category) 
  {
     int i_chef_id
     int i_category_id

     -- try to get chef_id if exist
     SELECT INTO i_chef_id
                 chef_id
     FROM chefs
     WHERE chef = p_chef

     if i_chef_id IS NULL {
        -- create new chef and get new created id
        INSERT chef  values (p_chef)

        SELECT INTO i_chef_id
                    chef_id
        FROM chefs
        WHERE chef = p_chef         
     }

     if not exist category {
        INSERT category values(category)
     }

     INSERT receipt  (name, i_chef_id, i_category_id) 
  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40550767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档