MySQL ORDER BY RAND() LIMIT 并合并

MySQL ORDER BY RAND() LIMIT and combine

我有 2 个 tables (tmp1,tmp2)。每个 table 仅包含唯一的 (product)_id。我需要创建一个查询,以便为来自 table tmp1 的每个 ID 从 table tmp2 获取固定数量和随机数的 ID。我用 GROUP_CONCAT 试过了,但得到的错误是:

SELECT p.products_id,
GROUP_CONCAT((SELECT tmp2.products_id FROM tmp2 tmp2 ORDER BY RAND() LIMIT 12))
FROM tmp1 tmp1
GROUP BY tmp1.products_id
LIMIT 1

"subquery returned more than one record"

这就是我需要的结果。

示例:


ID tmp1 | ID tmp2    
      1 | 103,204,867,547,354,514,541    
      2 | 542,245,876,542,681,248,428

最终在函数的帮助下到达那里

DELIMITER $$
CREATE FUNCTION randomness() RETURNS VARCHAR(10000)
NOT DETERMINISTIC
BEGIN
    DECLARE randomnum VARCHAR(500);

    SELECT  GROUP_CONCAT(ID)
    INTO    randomnum
    FROM    (
                SELECT  ID
                FROM    tmp2
                ORDER   BY RAND()
                LIMIT   12
            ) a;
    RETURN  randomnum;
END $$
DELIMITER ;

SELECT   *,
        (SELECT randomness())
FROM    tmp1

根据您在下面的最后一条评论,可以将结果添加到新的 table 中,如下所示:

CREATE TABLE tmp3
(
    ID INT,
    RandomNums VARCHAR(255)
)

INSERT INTO tmp3
SELECT *,
        (SELECT randomness())
FROM    tmp1