not in et optimisation

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 : not in et optimisation

par Invité » 20 déc. 2006, 17:21

excellent
je te remercie beaucoup.

je vais travailler tout ca ...

enciore merci :D

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()) :)

par Invité » 20 déc. 2006, 17:08

ok j ai trouve enfin
ca se passait dans la boucle p:
$i=0;	
if ($NbS>0) {

   if ($_POST['Page']!="")$Page=$_POST['Page'] ;

   
   if ($Page=="") $Page=0;
   $i = ($Page * $NbLigne);      
   $iMax = ($Page+1) * $NbLigne;
   while (($i < $NbS) AND ($i < $iMax))
{	
    $IdCliques= mysql_result($CursC, $i, "IdCliques");

	// si affichge =1 on compare les id pour afficher deja cliquer
	if($Affichage ="1")
	{
	// $N = explode ("-",$BddIdZ);
	// $A = count($IdZ);
	
	preg_match("-$IdCliques-", $BddIdZ, $matches);
	print_r($matches);
	}

etcetc
sinon est ce qu on peut optmisier tout ca !!! :P

not in et optimisation

par Invité » 20 déc. 2006, 16:31

bonjour

Explication du code

Memochoix
si 0 : on affiche pas les liens deja cliques
si 1: on affiche tous les liens mais les liens deja cliques sont affiches avec une mention 'deja cliques.'

Ce qu on recupere du champs LiensClicker sont les id des liens et est du type :-4000-15-12-18 (etc etc)
la premiere occurence par defaut est -4000 sinon le not in plante lorsque LiensCliquer est egal a zero.

On converti les tirets en virgules pour correspondre a la syntaxe de not in ().

if (isset($_SESSION['PseudoMemb'])&& isset($_SESSION['MemoChoix']))
 {
		if ($_SESSION['MemoChoix']=='0')
		{
			$Affichage ="0";
			$ReqZ = "SELECT * FROM membresparametres WHERE IdMemb=".$_SESSION['IdMemb']."";
			$CurZ = mysql_query($ReqZ);
			$BddIdZ = mysql_result($CurZ,0,"liensCliques");
 
			$N = explode ("-",$BddIdZ);
			$A = count($IdZ);
 
			$IdZ = preg_replace ("`-`", ",", "$BddIdZ");
			$IdZZ = substr($IdZ,1);
  
			$ReqC = "SELECT * FROM annu WHERE IdConc NOT IN($IdZZ) AND" . $Cond . $_POST['Order'] .$Order ;
		}
		else
		{
			$Affichage ="1";
			$ReqC = "SELECT * FROM annu " . $Cond . $_POST['Order'] .$Order ;	
		}
 
 $CursC = mysql_query($ReqC);
 $NbS = mysql_numrows($CursC);
 $NbLigne = 3;
 }
2 questions :
1)Peut o optimiser le code?
2)j aurai aime un aide pour construire la requete ou la mention deja clique s affiche.

merci pour vos reponses ! :D

Si vous avez des idees! :P