gpt4 book ai didi

php - 如何确定新项目的订单?

转载 作者:行者123 更新时间:2023-12-01 00:34:22 27 4
gpt4 key购买 nike

我在 MySQL 中有一个成员表

CREATE TABLE  `members` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(65) collate utf8_unicode_ci NOT NULL,
`order` tinyint(3) unsigned NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB;

而且我想让用户按照他们喜欢的方式对成员进行排序。我将订单存储在 order 列中。

我想知道如何插入要添加到列表底部的新用户。这就是我今天拥有的:

$db->query('insert into members VALUES (0, "new member", 0)');
$lastId = $db->lastInsertId();
$maxOrder = $db->fetchAll('select MAX(`order`) max_order FROM members');
$db->query('update members
SET
`order` = ?
WHERE
id = ?',
array(
$maxOrder[0]['max_order'] + 1,
$lastId
));

但这并不准确,因为当有多个用户同时添加新成员时,MAX(order) 可能会返回相同的值。

你如何处理这种情况?

最佳答案

您可以将 SELECT 作为 INSERT 的一部分执行,例如:

INSERT INTO members SELECT 0, "new member", max(`order`)+1 FROM members;

请记住,您将希望在 order 列上有一个索引来优化 SELECT 部分。

此外,您可能需要重新考虑 tinyint 的顺序,除非您只希望永远只有 255 个订单。

此外,order 是一个保留字,您始终需要将其写为“order”,因此您也可以考虑重命名该列。

关于php - 如何确定新项目的订单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/104747/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com