根据结果​​插入具有自动增量的记录

时间:2013-07-20 17:18:21

标签: mysql

我正在为应用程序开发一个评论数据库,我有以下问题,我不知道如何解决。

基本上我有一张这样的桌子:

comment_id | comment_text | thread_id | internal_id
-----------------------------------------------------
1              text1           1            1
2              text2           2            1
3              text3           1            2

基本上,我想要的是,如果我使用 thread_id = 1 进行插入, internal_id 应该自动 3 。< / p>

有没有办法通过使用INSERT查询来做到这一点?因为我不想使用PHP脚本来获取最后一个internal_id,然后插入此数字递增。

提前致谢

4 个答案:

答案 0 :(得分:1)

尝试一下,假设comment_id设置为auto_increment

INSERT INTO tableName (comment_text, thread_id, internal_id)
SELECT  'your comment' AS comment_text,
        1 AS thread_id,
        COALESCE(MAX(internal_id) + 1, 1) AS internal_id
FROM    tableName
WHERE   thread_id = 1

答案 1 :(得分:1)

您可以使用多种解决方案:

  1. 您可以尝试使用触发器来计算thread_id的特定范围内的internal_id。 http://dev.mysql.com/doc/refman/5.5/en/trigger-syntax.html

  2. 创建具有结构的附加表: thread_id,last_internal_id 。从此表中读取,将值放入特定注释并增加last_internal_id。

  3. 此外,您应该考虑到,如果两个人同时添加2条评论,您将使用哪种方法无关紧要,可以为internal_id获取相同的值。因此,为避免它,您应该使用锁或事务。

答案 2 :(得分:0)

如果您的引擎是MyISAM,则可以将internal_id设置为AUTO_INCREMENT作为元组(thread_id, internal_id)的一部分。

检查出来:

http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

对于MyISAM和BDB表,您可以在多列索引的辅助列上指定AUTO_INCREMENT。在这种情况下,AUTO_INCREMENT列的生成值计算为MAX(auto_increment_column)+ 1 WHERE prefix = given-prefix。当您想要将数据放入有序组时,这非常有用。

答案 3 :(得分:0)

您可以使用以下内容:

INSERT INTO TABLE_NAME (internal_id,comment_text,thread_id ) (
SELECT MAX(internal_id)+1,'TEXT',1 FROM TABLE_NAME WHERE thread_id =1 AND (
SELECT MAX(internal_id) FROM TABLE_NAME WHERE thread_id =1));

我没有数据库来测试它,所以我可能错了。如果我弄错了,请纠正我。