8722 sujets

Développement web côté serveur, CMS

Salut a tous,
juste un petit blem de requete, mais je n'arrive pas a trouver la solution.
La BDD :
ID|promoteur|refprogramme|....
1|promo01|prog01
2|promo01|prog02
3|promo02|prog01
4|promo02|prog02
5|promo02|prog03

je voudrais pouvoir afficher le nom des promoteurs et en dessous le nom des programmes en rapport bien entendu.
Ex :
* promo01
- prog01
- prog02
* promo02
- prog01
- prog02
- prog03

j'ai coder cela mais cela ne fonctionne pas, cela m'affiche un seul programme par promoteur.
Code :
	$requete = "SELECT DISTINCT promoteur, refprogramme FROM programme GROUP BY promoteur"; 
		$ret = mysql_query($requete);
		while($data = mysql_fetch_array($ret)) 	
		{
		$promoteur="$data[promoteur]";	
		$refprogramme="$data[refprogramme]";	
		echo"Promoteur : $promoteur<br />
<input type='checkbox' name='$refprogramme' value='$refprogramme'>$refprogramme <br />";
		}


Merci de votre aide
Modifié par spawns (07 Oct 2013 - 23:26)
Bonjour,

spawns a écrit :
cela m'affiche un seul programme par promoteur.

C'est normal, c'est l'effet voulu du "GROUP BY promoteur".
Tu n'a aussi pas besoin du DISTINCT.

Avant de regarder ton code php, regarde bien via phpMYadmin que ta requête te retourne le code souhaité.
Salut et merci de te pencher sur mon problème.
le bleme si j’enlève le group by et le distinct cela m'affiche les promoteurs et les programmes les un en dessous des autres.
je voudrais que cela s'affiche de la façon suivante
* promo01
- prog01
- prog02
* promo02
- prog01
- prog02
- prog03
ok merci pour l'info
j'ai essayé mais j'ai du merdé quelque part, car cela ne m'affiche pas le promoteur.

voici le code :

	$requete = "SELECT promoteur, refprogramme FROM programme ORDER BY promoteur"; 
		$ret = mysql_query($requete);
		$promoteur = null;
		while($data = mysql_fetch_array($ret)) 	
	{
		$promoteur="$data[promoteur]";	
		$refprogramme="$data[refprogramme]";	

    if (empty($promoteur) == $promoteur) {
        echo $promoteur;
        
    }
    echo $refprogramme.'<br />';


tu vois ou est le souci ???
oui, je vois le souci.

Tu as la variable $promoteur qui est utilisée pour 2 choses bien différentes. Et tu as supprimée une condition dans le if.

edit : regarde le sujet mentionné plus haut, il y a Lothindil qui vient juste de prendre le temps d'expliquer correctement le principe.
Modifié par benj (07 Oct 2013 - 18:13)
ok merci,
je dois être débile car je n'arrive pas a le faire fonctionné dans mon code.


	$requete = "SELECT promoteur, refprogramme FROM programme ORDER BY promoteur"; 
		$ret = mysql_query($requete);
		$initialisation=null;		
		while($data = mysql_fetch_array($ret)) 	
	{
		$promoteur="$data[promoteur]";	
		$refprogramme="$data[refprogramme]";	

    if (empty($initialisation) OR $initialisation!=$promoteur ) {
               echo $promoteur; //affiche
    }
    echo "<li>".$refprogramme."</li>";
	
}


Je vois ce que j'ai zappé ????

    if (empty($initialisation) OR $initialisation!=$promoteur ) {
               echo $promoteur; //affiche
               $initialisation = $promoteur;
    }
Modérateur
Salut,
j'avoue que j'ai lu en Z le sujet.
Toujours rester simple (KISS) . On affiche si la donnée est différente (pas besoin d'un DISTINCT ET GROUP BY) * :

la requete :

SELECT 
	promoteur, refprogramme 
FROM 
	programme



// $lastCat = ''; //s'il y a une erreur de type notice. variable indéfinie
while ($row = mysql_fetch_array($myResult, MYSQL_ASSOC)) {
	$thisCat = $row['promoteur'];
	if($thisCat != $lastCat){
		echo $row['promoteur'];
	}
	echo $row['refprogramme'];
	$lastCat = $row['promoteur'];
}


Au passage, j'ai l'impression que la table n'est pas intègre. Je verrai un truc comme * :

SELECT 
	prom.name AS promoteur, prog.refprogramme 
FROM 
	programme AS prog, promoteur AS prom 
WHERE 
	prom.id = prog.promoteur_id


* code fait de tête. Je peux m'être trompé.
Modifié par niuxe (07 Oct 2013 - 19:45)
benj a écrit :

    if (empty($initialisation) OR $initialisation!=$promoteur ) {
               echo $promoteur; //affiche
               $initialisation = $promoteur;
    }


ok vu j'avais zapper
$initialisation = $promoteur;


Merci cela fonctionne