Distinct empêche de récupérer l'ID

Eléphant du PHP | 160 Messages

23 sept. 2007, 23:09

Bonjour,

Je voudrais afficher des titres mais en ne les affichant qu'une seule fois si plusieurs enregistrements ont le même titre. J'ai donc utiliser DISTINCT.
Mais je voudrais aussi récupérer l'ID de l'entregistrement. Le distinct m'en empêche.

Est-ce possible dans ma requête ?
 <?
	$result = mysql_query('SELECT DISTINCT (titre) FROM news WHERE genre="1" ORDER BY titre ASC');
	if($result)
	{
	 	while($Record = mysql_fetch_object($result))
		{
?>
                <li><a href="index.php?submit=titrenews&id=<?=$Record->id?>"><?=$Record->titre?></a></li>  
          <?
		}
	}else{
			echo"<p>erreur de requête</p>";
}
?>
Merci,

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

23 sept. 2007, 23:15

Impossible d'effectuer les deux demandes en une requête.

Ce que tu peux faire est de sélectionner toutes les données en enregistrant les titres dans un tableau php et les afficher que s'il ne l'ont pas déja été... explications :
<?
    $result = mysql_query('SELECT titre, id  FROM news WHERE genre="1" ORDER BY titre ASC');
$titresAffiches = array();
    if($result)
    {
         while($Record = mysql_fetch_object($result))
        {
            if(!in_array($Record->id,$titresAffiches))
            {

?>
                <li><a href="index.php?submit=titrenews&id=<?=$Record->id?>"><?=$Record->titre?></a></li>  
          <?
                 $titresAffiches[] = $Record->id;
             }             
        }
    }else{
            echo"<p>erreur de requête</p>";
}
?>

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

23 sept. 2007, 23:17

Si un titre ne peut être associé qu'à un seul ID, tu peux fait un distinct sur les 2 colonnes.

Code : Tout sélectionner

SELECT DISTINCT id, titre FROM news WHERE genre="1" ORDER BY titre ASC
Sinon, il est beaucoup mieux de mettre la requête dans une variable plutôt que directement dans la fonction mysql_query()

exemple :
$str_requete = 'SELECT DISTINCT 
					id,
					titre
				FROM 
					news 
				WHERE 
					genre="1" 
				ORDER BY 
					titre ASC';
$result = mysql_query($str_requete);
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 160 Messages

23 sept. 2007, 23:25

merci pour votre aide.

Mais je me rends compte à l'instant que ma question était bizarre.
En effet, comme je veux pouvoir afficher tous les enregistrements correspondant à un titre, il peut donc y avoir plusieurs enregistrements par titre, je ne peux donc pas m'appuyer sur un ID.
Mais si je mets :
<li><a href="index.php?submit=titrenews&titre=<?=$Record->titre?>"><?=$Record->titre?></a></li>
je vais avoir un lien avec des %20 pour les espaces, etc... en cas de caractères spéciaux.

Comment contourner ce problème.
Et est-ce vraiment un problème hormis le fait que le lien sera moins lisible ?

ViPHP
AB
ViPHP | 5818 Messages

24 sept. 2007, 00:55

Peut - être utiliser rawurlencode() puis rawurldecode() ?

Sinon si tu développes aussi pour des serveurs mutualisés je te conseille de ne pas utiliser les short tags <? mais plutôt <?php car ils sont désactivés par défaut dans php5

Eléphant du PHP | 160 Messages

24 sept. 2007, 01:11

Merci,

Je vais regarder tout cela,