我知道有些问题的答案听起来是一样的,但我已经核对过了,我什么也回答不了我的问题。
我有一个菜谱表,其中有"chef_id“和"category_id”列。然后我有一个厨师表,其中有"id“和"name”列,还有类别表,还有"id“和"name”列。
当我插入一个新的食谱,我必须添加chef_id和category_id,他们需要已经存在,否则,它应该告诉我添加厨师和新类别之前,我添加食谱。
我该怎么去哪里查呢?我正在使用SQL。到目前为止,这就是我所得到的:
functions.php
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检查约束.但我希望不是因为我发现安静很难理解它是如何工作的.
谢谢!
发布于 2016-11-11 15:13:48
您可以在MySql中创建一个存储过程,以避免多次往返检查数据库。
我要用伪码,因为现在在电话里:
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)
}https://stackoverflow.com/questions/40550767
复制相似问题