Page 1 sur 1

Extraire 4 éléments de ma bd avec une condition et en aléatoire

Posté : 12 août 2015, 08:35
par yule
Bonjour,
Je souhaite afficher 4 éléments de ma bd au hasard mais avec la condition qu'il s'agisse d'un élément par catégorie (il y a 4 catégories).

Mon code ci-dessous ou je reste bloqué.. L'affichage aléatoire se fait bien, mais il peut afficher 3 éléments d'une même catégorie et c'est pas le but et je ne souhaite pas faire une requête par catégorie...

<?php	mysql_query('SET NAMES utf8');
		// +------ Requête pour extraire -------+
 
		/*Récupérer 4 éléments avec 4 catégories différentes ( un seul choix par catégorie => $idc)
 
		$idc =1; => apéros
		$idc =2; => plats
		$idc =3; => desserts
		$idc =4; => huiles
		*/
 
		// => comment indiquer dans mon query qu'il doit prendre qu'un élément par catégorie ($idc)
 
		$query = "SELECT * FROM $tablerfx1 WHERE valid='1' order  by RAND() LIMIT 0,4";
		$succes = mysql_query($query) or die ('requete =>'.$query.'<br> error->'.mysql_error());;
		$result = mysql_num_rows ($succes);	
 
		$p=0;
 
		while ($annuaireData=mysql_fetch_array($succes)) { 	
		extract($annuaireData);
 
		$titre = nl2br($titre); 
		$desch = nl2br($desch);
                $prix = nl2br($prix);
 
 
	?>	
 
			<p>...ma partie html...</p>
 
				<?php $p++;	}	?>
D'avance merci pour votre aide
Yule

Re: Extraire 4 éléments de ma bd avec une condition et en aléatoire

Posté : 12 août 2015, 09:16
par Elie
un petit SELECT DISTINCT `categorie`, * devrait fais l'affaire je pense

Re: Extraire 4 éléments de ma bd avec une condition et en aléatoire

Posté : 12 août 2015, 09:28
par ynx
Salut,

Moins joli mais aussi efficace avec UNION :
(SELECT * FROM $tablerfx1 WHERE valid='1' AND idc = 1 ORDER BY RAND() LIMIT 1)
UNION
(SELECT * FROM $tablerfx1 WHERE valid='1' AND idc = 2 ORDER BY RAND() LIMIT 1)
UNION
(SELECT * FROM $tablerfx1 WHERE valid='1' AND idc = 3 ORDER BY RAND() LIMIT 1)
UNION
(SELECT * FROM $tablerfx1 WHERE valid='1' AND idc = 4 ORDER BY RAND() LIMIT 1)
Bonne journée

Re: Extraire 4 éléments de ma bd avec une condition et en aléatoire

Posté : 12 août 2015, 10:00
par yule
Hello,

Merci à vous deux pour votre aide

Comme je pateauge un peu beaucoup... je devrais écrire la requête ainsi ou c'est grossier et faux ?

<?php

$query = " (SELECT * FROM $tablerfx1 WHERE valid='1' AND idc = 1 ORDER BY RAND() LIMIT 1)
UNION
(SELECT * FROM $tablerfx1 WHERE valid='1' AND idc = 2 ORDER BY RAND() LIMIT 1)
UNION
(SELECT * FROM $tablerfx1 WHERE valid='1' AND idc = 3 ORDER BY RAND() LIMIT 1)
UNION
(SELECT * FROM $tablerfx1 WHERE valid='1' AND idc = 4 ORDER BY RAND() LIMIT 1)";


    $succes = mysql_query($query) or die ('requete =>'.$query.'<br> error->'.mysql_error());;
    $result = mysql_num_rows ($succes);	
 
    $p=0;
 
    while ($annuaireData=mysql_fetch_array($succes)) { 	
    extract($annuaireData);
 
   etc.....
   
?>

id idc titre
1 1 crème dessert
2 4 pizza
3 2 Crème de gruyère
4 2 20 2012-11-14
5 3 160 2012-12-03
3 1 tarte aux pommes
3 2 Tartes aux poires
3 3 Crème double
3 2 tresse et croissant

il m'affichera 4 id au hasard mais avec 4 idc différend , on est d'accord ?

D'avance merci