Parcourir tout les enregistrements de ma table

ikramta Messages postés 151 Date d'inscription lundi 24 décembre 2007 Statut Membre Dernière intervention 10 février 2016 - 12 juin 2009 à 09:48
ikramta Messages postés 151 Date d'inscription lundi 24 décembre 2007 Statut Membre Dernière intervention 10 février 2016 - 15 juin 2009 à 16:40
bonjour tout le monde.
je suis dans la cas de faire pas mal de teste sur pas mal de table de ma base .
je veux chaque foit parcourir par exemple la table client pour savoir si un client est déja inscrit ou pas .


comment je peut améliorer mon code et merci bien d'avance.


$clt=0;
$req=mysql_query("SELECT num_carte,type_carte,id_clt FROM client"); 
 while($rep=mysql_fetch_array($req))
 {
 if(($identite==$rep['num_carte']) and ($typ==$rep['type_carte']))
 {
 $id=$rep['id_clt'];
 $clt=1;
 }
 } 
 if($clt==1) 
 {
 $req1=mysql_query("SELECT * FROM hors_ser WHERE statut='v'");
}

merci bien et bon code.

14 réponses

syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
12 juin 2009 à 12:51
Pourquoi tu ne rajoutes pas un WHERE dans ton select et un limit 0,1 ?
S.
0
coach759 Messages postés 43 Date d'inscription vendredi 29 mai 2009 Statut Membre Dernière intervention 4 mars 2011
12 juin 2009 à 16:10
Bonjour, tu peux faire

$sql=mysql_query('SELECT COUNT(*) AS nb FROM  client WHERE num_carte="'.$identite.'" AND type_carte="'.$typ.'"');

$sql=mysql_fetch_array($sql);

if($sql['nb']>0) alors il est présent.
sinon .....

voila

<hr size="2" width="100%" />Si à la Saint Valentin elle te caresse la main, vivement la Sainte Marguerite...
0
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
12 juin 2009 à 16:46
Ca revient à peu près à ma solution, 'sauf' que la mienne est plus rapide à l'exécution.. LOL !!
Je chipote..
S.
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
12 juin 2009 à 20:36
Salut,

Tu devrais utiliser les jointures, par exemple :

SELECT a, b, c
FROM client INNER JOIN hors_ser ON client.num_carte = hors_ser.num_carte
WHERE statut='v' AND  num_carte='$identite' AND type_carte='$typ';

En supposant que le champ num_carte soit la jointure des 2 tables.
Les lettres a, b, c, ... étant les champs de ta table hors_ser dont tu as besoin.
Ca serait 100 fois plus rapide et efficace.

Cordialement,

Kohntark -
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
12 juin 2009 à 20:47
@Syndrael :
Je ne suis pas sur du tout que ta requête soit plus rapide que celle de Coach, ça peut même être le contraire si le nombre d'enregistrements est très élevé.
Mais moi aussi, je chipote, car la différence d'exécution des 2 requêtes doit être vraiment minime.

Cordialement,

Kohntark -
0
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
12 juin 2009 à 22:42
euh.. je ne pense pas que la jointure que tu donnes soit possible puisque rien ne dit que hors_ser contient une colonne num_carte non ?? même si je pense que id_clt doit bien faire qqc dans l'ensemble..
Quant à l'exécution de ma requête, le but de la manip est de savoir s'il y en a une existence ou non.. le traitement de la requete s'arrête au premier trouvé.. Le count(*) sera potentiellement plus rapide s'il y a un index sur nm_carte et type_carte. Dans le cas contraire, ce sont toutes les lignes qui sont traitées..
Allez devant ses qqs neurones grillés je vais me coucher.
Bonne soirée
S.
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
13 juin 2009 à 11:32
euh ... j'ai écrit "En supposant que le champ num_carte soit la jointure des 2 tables"
Nous sommes bien obligé de supposer, comme tu le fais aussi, vu les renseignements fournis.
Si num_carte n'est pas un champ de jointure il y a tout intérêt à le faire (ou un autre champ plus adapté qui existe peut être déjà, mais je ne suis pas devin)

Le count(*) sera potentiellement plus rapide s'il y a un index sur
nm_carte et type_carte. Dans le cas contraire, ce sont toutes les
lignes qui sont traitées..
=>

Même sans index cette requête pourrait être plus rapide =>

Quant à l'exécution de ma requête, le but de la manip est de savoir
s'il y en a une existence ou non.. le traitement de la requete s'arrête
au premier trouvé..
=>
... et si le premier trouvé est le dernier des 1 million d'enregistrements ? => toutes les lignes seront traitées et ta requête sera plus longue que celle de Coach

Menfin bref, à mon humble petit avis il vaut mieux faire une jointure et ne faire ainsi qu'une seule requête, ce qui sera bien plus performant que 2 requêtes + traitement PHP.
Faudrait faire des tests et regarder ce que dit l'optimiseur, mais la différence devrait être importante.

Cordialement,

Kohntark -
0
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
13 juin 2009 à 13:35
Tu as raison.. "enfin bref".. On lui souhaite son million d'enregistrement et surtout le jour ou il se dira: Tiens et si j'optimisais.. parce que j'en ai les compétences.
Donc au final ce serait bien qu'il nous réponde..LOL !!
Bonne journée
S.
0
ikramta Messages postés 151 Date d'inscription lundi 24 décembre 2007 Statut Membre Dernière intervention 10 février 2016
15 juin 2009 à 11:21
bonjour tout le monde et merci bien pour tous.
bon j'ai un nouveau problème .
je prend l'exemple: j'inserre un client qui existe et une periode qui existe déja .
mon script au lieu d'excuté la premiere condition il passe toujours a la troisiemme.qui peut me dire comment corrigée  ça .
c'est le script final:

$req=mysql_query("SELECT num_carte,type_carte,id_clt FROM client"); 
 while($rep=mysql_fetch_array($req))
 {
 if(($identite==$rep['num_carte']) and ($typ==$rep['type_carte']))
 { $id=$rep['id_clt'];$clt=1; } 
 }
 
 $req1=mysql_query("SELECT * FROM hors_ser WHERE staut='v' and date_d='$date1' and date_f='$date2'"); 
     if($rep1=mysql_fetch_array($req1))
 {
 $id_p=$rep1['id_p'];$i=1; 
 }
 if(($clt==1) and ($i==1))
 {
 $req2=mysql_query("INSERT INTO ch_hs(id_ch,id_p,justification)VALUES('$n_ch','$id_p','reserver')");
 $req3=mysql_query("INSERT INTO  reservation VALUES('',CURRENT_TIMESTAMP(),'net','$date1','$date2','$obj','$adul','$bebe','$montant','carte bancaire','$id_type','$n_ch','Saidabeya','1','$id','a','v')");
if((!$req2) and (!req3))
{
?>
<script language="javascript">
  alert("reservation  non validé");
  window.location.replace('reservation.php');
</script>
<?php
}
else
{
?>
<script language="javascript">
  alert("reservation validé");
  window.location.replace('reservation.php');
</script>
<?php
}
 
 
 
 }
 else if(($clt==0) and ($i==1))
 {
 $req4=mysql_query("INSERT INTO client VALUES('','$titre','$nom','$prenom','$pays','$adresse','$codep','$ville','$mail','$tel','$fax','$web','$ncc','$tit','$val','$identite','$typ')");
 $req5=mysql_query("select id_clt from client  where nom='$nom' AND prenom='$prenom'");
    $rep5=mysql_fetch_array($req5);
 {$id=$rep5['id_clt'];}
 $req6=mysql_query("INSERT INTO ch_hs(id_ch,id_p,justification)VALUES('$n_ch','$id_p','reserver')");
 $req7=mysql_query("INSERT INTO  reservation VALUES('',CURRENT_TIMESTAMP(),'net','$date1','$date2','$obj','$adul','$bebe','$montant','carte bancaire','$id_type','$n_ch','Saidabeya','1','$id','a','v')");
if((!$req4) and (!rep5)and (!req6)and (!req7))
{
?>
<script language="javascript">
  alert("reservation  non validé");
  window.location.replace('reservation.php');
</script>
<?php
}
else
{
?>


<script language="javascript">
  alert("reservation validé");
  window.location.replace('reservation.php');
</script>
<?php
}
 
 
 
 
 
 }
 else if(($clt==1) and ($i==0))
 {
 $req8=mysql_query("INSERT INTO hors_ser VALUES('','$date1','$date2','v')");
 $req9=mysql_query("select id_p FROM hors_ser  WHERE date_d='$date1' AND date_f='$date2'");
    $rep9=mysql_fetch_array($req9);
 {$id_p=$rep9['id_p'];}
 $req10=mysql_query("INSERT INTO ch_hs(id_ch,id_p,justification)VALUES('$n_ch','$id_p','reserver')");
 $req11=mysql_query("INSERT INTO  reservation VALUES('',CURRENT_TIMESTAMP(),'net','$date1','$date2','$obj','$adul','$bebe','$montant','carte bancaire','$id_type','$n_ch','Saidabeya','1','$id','a','v')");
if((!$req8) and (!rep9)and (!req10)and (!req11))
{
?>
<script language="javascript">
  alert("reservation  non validé");
  window.location.replace('reservation.php');
</script>


<?php
}
else
{
?>
<script language="javascript">
  alert("reservation validé");
  window.location.replace('reservation.php');
</script>


<?php
}
 
 
 
 }
 else
 {
 $req12=mysql_query("INSERT INTO client VALUES('','$titre','$nom','$prenom','$pays','$adresse','$codep','$ville','$mail','$tel','$fax','$web','$ncc','$tit','$val','$identite','$typ')");
 $req13=mysql_query("select id_clt from client  where nom='$nom' AND prenom='$prenom'");
    $rep13=mysql_fetch_array($req13);
 {$id=$rep13['id_clt'];}
 
 $req14=mysql_query("INSERT INTO hors_ser VALUES('','$date1','$date2','v')");
 $req15=mysql_query("select id_p FROM hors_ser  WHERE date_d='$date1' AND date_f='$date2'");
    $rep15=mysql_fetch_array($req15);
 {$id_p=$rep15['id_p'];}
 
 
 $req16=mysql_query("INSERT INTO ch_hs(id_ch,id_p,justification)VALUES('$n_ch','$id_p','reserver')");
 $req17=mysql_query("INSERT INTO  reservation VALUES('',CURRENT_TIMESTAMP(),'net','$date1','$date2','$obj','$adul','$bebe','$montant','carte bancaire','$id_type','$n_ch','Saidabeya','1','$id','a','v')");
if((!$req12) and (!rep13)and (!req14)and (!rep15)and (!req16)and (!req17))
{
?>


<script language="javascript">
  alert("reservation  non validé");
  window.location.replace('reservation.php');
</script>


<?php
}
else
{
?>
<script language="javascript">
  alert("reservation validé");
  window.location.replace('reservation.php');
</script>
<?php
}
 
 
 
 }
 

merci bien d'avance et bon code.
0
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
15 juin 2009 à 12:22
T'as pas plus long comme code ?? LOL..
Et tu nous dis que tu as un autre problème.. peut-être que ça aurait été sympa de nous dire comment tu as résolu le précédent..
Pour ce problème je passe mon tour..
S.
0
ikramta Messages postés 151 Date d'inscription lundi 24 décembre 2007 Statut Membre Dernière intervention 10 février 2016
15 juin 2009 à 12:42
salut mais vous avez tout .
j'ai gardée ma solution psq j'été préccée par le temps
0
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
15 juin 2009 à 13:41
Ben garde ta solution.. je garde justement celle que j'avais à ton problème..
C'est ici un espace d'échange à mon sens. Si tu garde les choses pour toi, ou va-t-on ??
S.
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
15 juin 2009 à 15:49
Idem que pour Syndrael, ça ne sert à rien de passer du temps à t'aider et te proposer des solutions si tu n'as pas la décence de les appliquer et de tenir au courant le forum.
Je me demande ce que tu fais ici à vrai dire (??)

Kohntark -
0
ikramta Messages postés 151 Date d'inscription lundi 24 décembre 2007 Statut Membre Dernière intervention 10 février 2016
15 juin 2009 à 16:40
salut et je m'excuse infiniment,vous avez raison .
je vais les essaiyée tout de suite .merci encore une fois et bon code pour tous
0
Rejoignez-nous