2017-10-14 6 views
0

I ont 2 tables (TMP1, tmp2). Chaque table contient uniquement des _id (produits) uniques. J'ai besoin de créer une requête pour obtenir un nombre fixe et aléatoire d'ID de la table tmp2 pour chaque ID de la table tmp1. Je l'ai essayé avec GROUP_CONCAT, mais je reçois de l'erreur:MySQL ORDER BY RAND() LIMIT et combiner

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 

« sous-requête retourné plus d'un enregistrement »

C'est le résultat que j'ai besoin.

exemple:


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

Voir [Pourquoi devrais-je fournir un M CVE pour ce qui me semble être une requête SQL très simple] (http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me -to-be-a-very-simple-sql-query) – Strawberry

+0

Y a-t-il une relation définie entre ces 2 tables? –

+0

Où est votre clause de jointure? –

Répondre

0

Nous sommes arrivés là à la fin, avec l'aide d'une fonction

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 

Selon votre dernier commentaire ci-dessous, les résultats peuvent être ajoutés à une nouvelle table comme suit:

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

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

WOW! Ça marche! Où est la boîte dans laquelle je peux mettre de l'argent? Merci beaucoup! –

+0

Haha. Pas besoin d'argent, en appuyant sur le bouton de tic-tac fera;) – SEarle1986

+0

Désolé, où est le bouton de tick? –