Se connecter avec
S'enregistrer | Connectez-vous

Selection aléatoire

Dernière réponse : dans Programmation

Hello, j'ai un petit problème avec une requête SQL que je n'arrive pas a faire.
Quelques explications:

J'ai une première table "defprod" avec comme champs:
  1. id | nom | exemplaires


et une seconde table "produits" avec comme champs:
  1. id | prod_id | client_id

Les deux tables sont reliées par le champ "prod_id". En gros j'ai une table avec les caractéristiques des produits (table defprod) et une autre avec les produits associés a des clients.

Ce que je voudrais faire c'est sélectionner aléatoirement un id de la table "defprod" si et seulement si le nombre de produits correspondants a ce type de produit (prod_id) dans la table "produits" est inférieur aux nombre situé dans le champ "exemplaires".

J'ai tenté :
  1. SELECT RAND(d.id)
  2. FROM defprod d, produits p
  3. WHERE d.id=p.type_id AND d.exemplaires>COUNT(p.id)

Mais j'ai le droit à:
"ERREUR Utilisation invalide de la clause GROUP"
J'oublie de préciser que je suis relativement débutant et que cette requête un peu particulière ne doit pas être fondamentalement difficile a faire.
PS: J'ai cherché dans la Doc Mysql, je n'y ai rien trouvé qui pourrait arranger mon problème

Merci pour votre aide :hello: 

Autres pages sur : selection aleatoire

Lassé par la pub ? Créez un compte

euh, je suis pas sur d'avoir tout compris.
C'est quoi le p.type_id ?

sinon, tu peux pas utiliser le Count() dans la clause Where.
il faudrait faire une requete imbriquee :
select rand(d.id)
from defprod d, produits p
where d.id=p.type_id and d.exemplaires > (
select count(pr.id) from produits pr, defprod dfp
where pr.type_id=d.id)

mais à mon avis, ton analyse de départ pour le modèle de données n'est pas bonne parce que cette requete a l'air bien complexe pour ton utilisation...
De plus, il me semble que MySQL ne gère les requetes imbriquées.

merci pour ton aide!
j'vais étudier ça. Franchement pour le schéma de la base, je voit pas comment faire a part ça.
Le prob c'est que mon hébergeur tourne sous Mysql 3.23 donc je suis baisé pour les requêtes imbriquées, ce qui m'aurait bien aidé :( 
Enfin j'crois savoir comment je pourrais faire autrement, mais ce sera plus lourd :( 
C'est con qu'on puisse pas mettre un COUNT() dans un WHERE :( 

Merci encore :jap: 

pas de koi...
un truc plus lourd : ca peut être de récupérer d'abord un id et de faire les requetes les unes après les autres et de stocker les résultats dans des variables PHP à chaque fois.
Tu réutilises ces variables dans la construction de ta requete...

j'ai finalement choisit de stocker mes valeurs dans des tableaux (un dans lequel je stocke le nombre max de chaque type de produits, dans l'autre le nombre de produits correspondants a ce type), je fait une boucle et trie les enregistrement a garder que je refout dans un tableau et après je prends un enregistrement aléatoire dans ce tableau.
Lassé par la pub ? Créez un compte