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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Distinct empêche de récupérer l'ID

par jpsartre » 24 sept. 2007, 01:11

Merci,

Je vais regarder tout cela,

par AB » 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

par jpsartre » 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 ?

par zeus » 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);

par Truc » 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>";
}
?>

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

par jpsartre » 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,