ikramta
Messages postés151Date d'inscriptionlundi 24 décembre 2007StatutMembreDernière intervention10 février 2016
-
12 juin 2009 à 09:48
ikramta
Messages postés151Date d'inscriptionlundi 24 décembre 2007StatutMembreDernière intervention10 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'");
}
kohntark
Messages postés3705Date d'inscriptionlundi 5 juillet 2004StatutMembreDernière intervention27 avril 201230 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 -
Vous n’avez pas trouvé la réponse que vous recherchez ?
kohntark
Messages postés3705Date d'inscriptionlundi 5 juillet 2004StatutMembreDernière intervention27 avril 201230 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.
syndrael
Messages postés2378Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention29 décembre 201220 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.
kohntark
Messages postés3705Date d'inscriptionlundi 5 juillet 2004StatutMembreDernière intervention27 avril 201230 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.
syndrael
Messages postés2378Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention29 décembre 201220 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.
ikramta
Messages postés151Date d'inscriptionlundi 24 décembre 2007StatutMembreDernière intervention10 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
{
?>
}
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>
}
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>
syndrael
Messages postés2378Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention29 décembre 201220 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.
syndrael
Messages postés2378Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention29 décembre 201220 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.
kohntark
Messages postés3705Date d'inscriptionlundi 5 juillet 2004StatutMembreDernière intervention27 avril 201230 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 (??)