【问题标题】:insert in one table automatically adds null to another table在一个表中插入会自动将 null 添加到另一个表中
【发布时间】:2014-08-21 07:49:55
【问题描述】:

我有两张表,即问答表。

问题表列: qid(主键自动递增), 问题, 日期, 回答, ans_id(外键值将是qid), 回答

这就是我想做的。我在一个表中插入值,例如问题表,然后自动将 qid 插入答案表列 ans_id 例如

我插入值

**qid => 1
question => 'This is question'
date => 'dd/mm/yy' (auto insert)**

只需在问题表中输入答案表值应该像这样自动插入

**ans_id => 1
answer => null**

我知道这可以在访问中轻松完成,但我无法在我的 sql phpmyadmin 中执行此操作。我还添加了外键约束,但它没有帮助。请帮助

【问题讨论】:

    标签: php mysql phpmyadmin


    【解决方案1】:

    看看触发器。您可以插入/更新/删除或几乎任何其他由另一个插入/更新/删除触发的东西

    http://dev.mysql.com/doc/refman/5.5/en/trigger-syntax.html

    【讨论】:

    • 在提供的链接中有实际的工作示例可以完全满足您的需求。请自己努力!
    【解决方案2】:

    表结构

    Question (qid, question, date)  --- qid (primary and Auto increment)
    Answer(ans_id, answer, qid)   ---- ans_id (primary and auto increment) qid (foreign key)
    

    在这里你可以这样做:

    // calling save to save values in DB
    function save()
    {
        // getting values from post
        // insert query to save values of question in Question table
        mysql_query("INSERT INTO `Question` (`question`, `date`) VALUES ('$question', NOW())");
        $last_inserted_question_id = mysql_insert_id(); // return last inserted id
        // again run insert query to insert value in answer table
        mysql_query("INSERT INTO `Answer` (`answer`, `qid`) VALUES (null , '$last_inserted_question_id')");
    }
    

    否则,您可以使用触发器的概念,当您在问题表中插入某些内容时,该触发器将自动运行查询以在答案表中插入。

    DROP TRIGGER IF EXISTS testTrigger;
    CREATE TRIGGER testTrigger 
    BEFORE INSERT ON Question
    FOR EACH ROW 
    BEGIN 
      // insert query for answer table
    END;
    

    希望能帮到你!

    【讨论】:

    • 当很多人在其中输入数据时,这可能会变得很困难。
    • @Umerm:然后您可以使用预执行查询的触发器。并且会自动运行。
    • 如果存在则删除触发器 testTrigger; CREATE TRIGGER testTrigger AFTER INSERT ON Question FOR EACH ROW BEGIN // 为答案表插入查询 END;
    • mysqltutorial.org/stored-procedures-parameters.aspx 你也可以使用存储过程。这是一个很好的例子。如果我帮助了你并给出了解决方法的一些想法,请为我​​的答案投票。
    • 在触发器中你不能像函数一样传递参数。请使用 mysqltutorial.org/stored-procedures-parameters.aspx 因此,在编写自己的过程时,您可以传递 IN 参数,即 ques_id 在您的情况下。并且可以在程序中编写插入查询。给你好的链接它会像问题的插入查询 // 将返回 Ques_id 插入调用过程传递问题 id 并将执行答案表的插入查询。请记住,您不需要为主要且具有自动增量的列传递值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    相关资源
    最近更新 更多