我试图创建一个MySQL函数,它接受
每次调用该函数将返回一个组合,该组合必须与所有先前的组合不同。
在生成过程中,必须检查另一个表:如果组合已经存在,请继续循环,直到每个组合都唯一。以破折号分隔的ids形式返回组合,如果没有足够的空间返回唯一组合,则返回false。
因此,我会像这样获取100个随机项:
以
更新:
整个SQL转储在这里:https://gist.github.com/anonymous/e5eb3bf1a10f9d762cc20a8146acf866。
n
和m
作为输入,并从查询结果中生成m
个ids的n
个随机唯一组合。每次调用该函数将返回一个组合,该组合必须与所有先前的组合不同。
在生成过程中,必须检查另一个表:如果组合已经存在,请继续循环,直到每个组合都唯一。以破折号分隔的ids形式返回组合,如果没有足够的空间返回唯一组合,则返回false。
因此,我会像这样获取100个随机项:
SELECT
`Item`.`id`
FROM
`Item`
LEFT JOIN `ItemKeyword` ON `Item`.`id` = `ItemKeyword`.`ItemID`
WHERE
(`Item`.`user_id` = '2')
AND(`ItemKeyword`.`keywordID` = 7130)
AND(`Item`.`type` = 1)
ORDER BY RAND()
LIMIT 100
以
-
连接的itemID
的md5被用来存储过去的组合。因此,我需要将这个查询的结果通过-
连接在一起,并创建它的md5值。然后,发送另一个查询到名为Combination
的第二个表格,并通过hash
列检查它是否存在。并继续这个循环,直到我得到了n
个结果。我无法想出如何正确快速地实现这个功能。有什么建议吗?更新:
整个SQL转储在这里:https://gist.github.com/anonymous/e5eb3bf1a10f9d762cc20a8146acf866。