par
Ryle » 20 déc. 2006, 17:13
Oh bah pour optimiser on peut faire plein de chose, mais le mieux serait peut être de revoir la structure de ta base pour avoir une table des id liens cliqués par utilisateur (ce qui permettrait d'obtenir le résultat souhaité en une seule requête) plutôt qu'un champ de données concaténées dont on ne peut rien faire...
Quoi qu'il en soit, voici quelques remarques en vrac
- Je ne vois pas l'intérêt de la variable $Affichage ? (qui n'est en l'occurence pas utilisée dans cette partie du code) Pour la partie ou elle est potentiellement utilisée le test sur la session n'est il pas suffisant ?
- Liste tes champs : au lieu de "SELECT * FROM" fais un "SELECT liensCliques FROM". S'il n'y a qu'un champ dont la valeur t'interesse, il est inutile de ramener les autres (et c'est mieux de se débarasser de cette habitude de mettre un "SELECT *" qui ne permet pas de savoir sous quelle forme et dans quel ordre les données sont renvoyées

)
- $N = explode ("-",$BddIdZ); // pas utilisé => pas d'intérêt
- $A = count($IdZ); // pas utilisé, à supprimer ou au contraire à prendre en compte pour gérer le fait qu'il n'y ait pas d'élément (et donc ne pas mettre la condition NOT IN) ou s'il n'y en a qu'un (et avoir une simple condition "!=")
- AND" . $Cond // d'où vient cette valeur ? $_GET ? $_POST ?
- .$Order // même question, si pas de valeur = pas d'intérêt
- enfin, tu dois pouvoir simplifier le code en "factorisant" ta requête qui liste les liens et en ajoutant la condition "WHERE IdConc NOT IN" sous condition :
$sql = "SELECT ... FROM ..."
if(..) {
$sql.= " WHERE ... ";
}
Quant aux liens déjà cliqués, tu as la liste des id dans $IdZZ et $N (probablement plus exploitable) donc selon ce que tu veux faire tu peux vérifier si un id a déjà été cliquer (avec ereg() ou in_array()), ou simplement dire si des lien ont déjà été cliqué sans donner plus de détail (strlen() ou count())

Oh bah pour optimiser on peut faire plein de chose, mais le mieux serait peut être de revoir la structure de ta base pour avoir une table des id liens cliqués par utilisateur (ce qui permettrait d'obtenir le résultat souhaité en une seule requête) plutôt qu'un champ de données concaténées dont on ne peut rien faire... :)
Quoi qu'il en soit, voici quelques remarques en vrac ;)
- Je ne vois pas l'intérêt de la variable $Affichage ? (qui n'est en l'occurence pas utilisée dans cette partie du code) Pour la partie ou elle est potentiellement utilisée le test sur la session n'est il pas suffisant ?
- Liste tes champs : au lieu de "SELECT * FROM" fais un "SELECT liensCliques FROM". S'il n'y a qu'un champ dont la valeur t'interesse, il est inutile de ramener les autres (et c'est mieux de se débarasser de cette habitude de mettre un "SELECT *" qui ne permet pas de savoir sous quelle forme et dans quel ordre les données sont renvoyées :))
- $N = explode ("-",$BddIdZ); // pas utilisé => pas d'intérêt
- $A = count($IdZ); // pas utilisé, à supprimer ou au contraire à prendre en compte pour gérer le fait qu'il n'y ait pas d'élément (et donc ne pas mettre la condition NOT IN) ou s'il n'y en a qu'un (et avoir une simple condition "!=")
- AND" . $Cond // d'où vient cette valeur ? $_GET ? $_POST ?
- .$Order // même question, si pas de valeur = pas d'intérêt :)
- enfin, tu dois pouvoir simplifier le code en "factorisant" ta requête qui liste les liens et en ajoutant la condition "WHERE IdConc NOT IN" sous condition :
[php]$sql = "SELECT ... FROM ..."
if(..) {
$sql.= " WHERE ... ";
}[/php]
Quant aux liens déjà cliqués, tu as la liste des id dans $IdZZ et $N (probablement plus exploitable) donc selon ce que tu veux faire tu peux vérifier si un id a déjà été cliquer (avec ereg() ou in_array()), ou simplement dire si des lien ont déjà été cliqué sans donner plus de détail (strlen() ou count()) :)