我有3张桌子:
组:
id
name
Run Code Online (Sandbox Code Playgroud)
SetItem:
set_id
item_id
position
Run Code Online (Sandbox Code Playgroud)
TEMPSET:
id
Run Code Online (Sandbox Code Playgroud)
我有一个从Item表生成新的随机组合的函数.基本上,总是在成功生成之后,我在Set表中创建一个新行,获取它的id并将所有项ID添加到SetItem表中.
每次生成新组合之前,我都会截断TempSet表格,将新项目ID填入此表格,并通过与SetItem表格中的先前组合进行比较来检查相似性百分比.如果新组合相似度大于或等于30%,我需要阻止这种组合并重新生成新的组合.
相似性意味着 - 在先前生成的组合上存在元素.所以,这个想法是:
如果在一些先前生成的集合上重复了多于3个新生成集合的元素,则阻止它并尝试生成另一个组合.
这是生成新组合的函数:
CREATE DEFINER = `root` @`localhost` FUNCTION `gen_uniq_perm_by_kw` (
comboSize INT ( 5 ),
tries INT ( 3 )
) RETURNS text CHARSET utf8 SQL SECURITY INVOKER BEGIN
iterat :
LOOP
DELETE
FROM
`TempSet`;
INSERT INTO `TempSet` ( `id` ) (
SELECT
`i`.`id`
FROM
`Item` AS `i`
ORDER BY
RAND( )
LIMIT …Run Code Online (Sandbox Code Playgroud)