我正在为应用程序开发一个评论数据库,我有以下问题,我不知道如何解决。
基本上我有一张这样的桌子:
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,然后插入此数字递增。
提前致谢
答案 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)
您可以使用多种解决方案:
您可以尝试使用触发器来计算thread_id的特定范围内的internal_id。 http://dev.mysql.com/doc/refman/5.5/en/trigger-syntax.html
创建具有结构的附加表: thread_id,last_internal_id 。从此表中读取,将值放入特定注释并增加last_internal_id。
此外,您应该考虑到,如果两个人同时添加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));
我没有数据库来测试它,所以我可能错了。如果我弄错了,请纠正我。