Parcourir tout les enregistrements de ma table

Signaler
Messages postés
151
Date d'inscription
lundi 24 décembre 2007
Statut
Membre
Dernière intervention
10 février 2016
-
Messages postés
151
Date d'inscription
lundi 24 décembre 2007
Statut
Membre
Dernière intervention
10 février 2016
-
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

Messages postés
2381
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
16
Pourquoi tu ne rajoutes pas un WHERE dans ton select et un limit 0,1 ?
S.
Messages postés
43
Date d'inscription
vendredi 29 mai 2009
Statut
Membre
Dernière intervention
4 mars 2011

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...
Messages postés
2381
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
16
Ca revient à peu près à ma solution, 'sauf' que la mienne est plus rapide à l'exécution.. LOL !!
Je chipote..
S.
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
27
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 -
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
27
@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 -
Messages postés
2381
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
16
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.
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
27
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 -
Messages postés
2381
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
16
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.
Messages postés
151
Date d'inscription
lundi 24 décembre 2007
Statut
Membre
Dernière intervention
10 février 2016

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.
Messages postés
2381
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
16
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.
Messages postés
151
Date d'inscription
lundi 24 décembre 2007
Statut
Membre
Dernière intervention
10 février 2016

salut mais vous avez tout .
j'ai gardée ma solution psq j'été préccée par le temps
Messages postés
2381
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
16
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.
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
27
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 -
Messages postés
151
Date d'inscription
lundi 24 décembre 2007
Statut
Membre
Dernière intervention
10 février 2016

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