gpt4 book ai didi

php - 限制 MySQL 表中每个键的最大记录数

转载 作者:行者123 更新时间:2023-11-28 23:54:53 25 4
gpt4 key购买 nike

我有一个按照以下结构存储产品的表...

id shop_id product_id product_title

每家店铺选择一个方案,相应地在这个表中可以存储N个产品。每个店铺的N都不一样。

问题陈述:在表中进行插入操作时,每个shop_id的条目总数不能超过N。

我可以在每次插入操作之前计算#products,然后决定是将新条目放入表中还是将其忽略。操作由收到的事件触发,可能以百万计。所以它似乎没有效率。性能是关键。

有没有更好的办法?

最佳答案

我认为您应该使用存储过程,这样您就可以将验证委托(delegate)给 MySql 而不是 PHP,这是您可能需要的示例,只需确保正确替换表名和列名即可。

如果您担心性能,您应该检查表的索引以获得更好的性能。

程序

DELIMITER //
DROP PROCEDURE IF EXISTS storeProduct//
CREATE PROCEDURE storeProduct(IN shopId INT, IN productId INT, IN productTitle VARCHAR(255))
LANGUAGE SQL MODIFIES SQL DATA SQL SECURITY INVOKER
BEGIN
/*Here we get the plan for the shop*/
SET @N = (SELECT plan FROM planTable WHERE shop_id = shopId);

/*NOW WE COUNT THE PRODUCTS THAT ARE STORED WITH THE shop_id*/
SET @COUNT = (SELECT COUNT(id) FROM storing_products WHERE shop_id = shopId);

/*NOW WE CHECK IF WE CAN STORE THE PRODUCTS OR NOT*/
IF @COUNT < @N THEN
/*YES WE CAN INSERT*/
INSERT INTO storing_products(shop_id, product_id, product_title)
VALUES (shopId, productId, productTitle);
/*1 means that the insert acording to the plan is ok*/
SELECT 1 AS 'RESULT';
ELSE
/*NO WE CAN NOT INSERT*/
/*0 means that the insert acording to the plan is not ok*/
SELECT 0 AS 'RESULT';
END IF;
END//
DELIMITER ;

现在您可以像从 PHP 调用它一样

<?php
//....
$result = $link->query("CALL storeProduct($shop_id, $product_id, $product_title);");
//....
?>

或者无论你做什么

答案是这样的

+--------+
| RESULT |
+--------+
| 1 |
+--------+

如果没问题

+--------+
| RESULT |
+--------+
| 0 |
+--------+

如果没有

希望对你有帮助

问候

关于php - 限制 MySQL 表中每个键的最大记录数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31967839/

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