| 
                         我无法正确执行INSERT查询,而且我似乎无法在Google或Stack Overflow上找到解决此特定问题的任何内容. 
我正在尝试为特色条目创建一个简单的表,其中entry_id与它的当前顺序一起保存到表中. 
我想要的输出是这样的: 
如果特色表目前有这三个条目: 
featured_id    entry_id    featured_order
1              27          0
2              54          1
4              23          2
 
我希望使用featured_order = 3保存下一个条目. 
我试图让以下查询工作没有运气: 
INSERT INTO `featured`
(
    `entry_id`,`featured_order`
)
VALUES
(
    200,(SELECT COUNT(*) AS `the_count` FROM `featured`)
)
 
我得到的错误是:您不能在FROM子句中为更新指定目标表’featured’. 
任何人都可以帮助获得计数而不会导致错误的解决方案吗? 
提前致谢! 
最佳答案
这是一件很酷的事:MySQL的INSERT . . . SELECT:
INSERT INTO `featured`
(
    `entry_id`,`featured_order`
)
SELECT 200,COUNT(*) + 1
FROM `featured`
 
不需要子查询. 
@Bohemian有一个好点: 
Better to use max(featured_order) + 1 if you use this approach 
 
所以更好的查询可能是: 
INSERT INTO `featured`
(
    `entry_id`,MAX(`featured_order`) + 1
FROM `featured`
 
他的触发方法在他的回答中描述也是实现你想要的好方法. 
查询1的潜在问题是,如果您删除了一行,则排名将被删除,并且您将在featured_order中重复.使用第二个查询这不是问题,但是您将有间隙,就像使用自动增量列一样. 
如果您绝对必须拥有无间隙的订单,我所知道的最佳解决方案是运行以下一系列查询: 
SET @pos:=0;
DROP TABLE IF EXISTS temp1;
CREATE TEMPORARY TABLE temp1 LIKE featured;
ALTER TABLE featured ORDER BY featured_order ASC;
INSERT INTO temp1 (featured_id,entry_id,featured_order) 
SELECT featured_id,@pos:=@pos+1 FROM words;
UPDATE featured 
JOIN temp1 ON featured.featured_id = temp1.featured_id 
SET featured.rank = temp1.rank;
DROP TABLE temp1;
 
每当你删除一行                         (编辑:莱芜站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |