2009-10-03 5 views
3

Il s'agit d'une sélection simple à partir d'une seule table. Le but est de sélectionner quatre produits aléatoires, un de chaque x nombre de catégories, avec quelques limitations «où». J'ai essayé ceci:Sélectionner des lignes aléatoires mais sans doublons de valeurs d'une colonne

SELECT pName, 
     pID 
    from products 
    WHERE pDisplay=1 
    AND pFeatured=1 
GROUP BY pCategory 
ORDER BY RAND() 
    LIMIT 0,4 

Ce genre de travaux, mais il retourne toujours le même produit d'une catégorie donnée. Je souhaite varier les produits présentés, tout en ne montrant qu'un seul produit pour une catégorie donnée.

J'ai aussi essayé:

SELECT DISTINCT(pCategory) 
     pName, 
     pID 
    from products 
    WHERE pDisplay=1 
    AND pFeatured=1 
ORDER BY RAND() 
    LIMIT 0,4 

Je pense peut-être qu'il a besoin de deux sélectionne -le premier à obtenir une 4 catégories au hasard le deuxième à choisir une ligne aléatoire de chacun d'eux, mais a. je ne suis pas sûr de savoir comment faire cela, et b. préférerait utiliser une seule requête si possible.

Répondre

2

Pas très sympa, mais je pense que c'est le meilleur que vous pouvez faire dans MySQL.

SELECT p.pID, p.pName 
    FROM (
     SELECT (
      SELECT pID FROM products 
      WHERE pCategory=p.pCategory AND pDisplay=1 AND pFeatured=1 
      ORDER BY rand() LIMIT 1 
      ) AS pID 
     FROM products p 
     WHERE pDisplay=1 AND pFeatured=1 
     GROUP BY pCategory 
     ORDER BY rand() LIMIT 4 
     ) c 
    JOIN products p ON c.pID = p.pID 

(la requête de karim79 peut renvoyer plusieurs produits de la même catégorie, peut-être même des produits avec pDISPLAY = 0 ou pFeatured = 0. La requête de rexem traite la question pDISPLAY/pFeatures, mais peut aussi renvoyer plusieurs produits de la même catégorie)

+0

Merci! Cela fonctionne parfaitement - vous aviez raison sur le précédent, il a retourné plusieurs produits d'un chat donné. – Katherine

Questions connexes