Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3880 connectés 

 


Dernière réponse
Sujet : [ php ] jointures problemes
omega2

ludo2604 a écrit a écrit :

 
 
bah c bon ça marche maintenant il me reste un dernier truc à faire si tu peux m'aider...
 
bon ca ca compte tout une table: count(*)
 
mais quand on a des jointures dans la requete comment je peux compter qu'une tble?



count(table.*) ?
Mais ca te doneras soit le nombre de ligne retourné par la requête, soit le nombre de ligne de la table spécifié qui sont retourné par la requête, soit le nombre de ligne de la table, soit le nombre de ligne de la table qui corespondent à chaque ligne retourné par la requête (s'il n'y a que des distinct, des sum et autres trucs du genre sur une des autres tables de la requête).
Entre les trois permières possibilités, je sais plus quelles sont celles qui sont parfois retrouné par les requêtes, pour la dernière, je sais qu'on peut arrivé à avoir ce résultat là mais c'est parfois dur d'y arriver. ;)


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
omega2

ludo2604 a écrit a écrit :

 
 
bah c bon ça marche maintenant il me reste un dernier truc à faire si tu peux m'aider...
 
bon ca ca compte tout une table: count(*)
 
mais quand on a des jointures dans la requete comment je peux compter qu'une tble?



count(table.*) ?
Mais ca te doneras soit le nombre de ligne retourné par la requête, soit le nombre de ligne de la table spécifié qui sont retourné par la requête, soit le nombre de ligne de la table, soit le nombre de ligne de la table qui corespondent à chaque ligne retourné par la requête (s'il n'y a que des distinct, des sum et autres trucs du genre sur une des autres tables de la requête).
Entre les trois permières possibilités, je sais plus quelles sont celles qui sont parfois retrouné par les requêtes, pour la dernière, je sais qu'on peut arrivé à avoir ce résultat là mais c'est parfois dur d'y arriver. ;)

ludo2604

HappyHarry a écrit a écrit :

 
 
tu veux pas afficher la requete avant qu'elle soit executée, comme ca a deja ete demandé ?




 
bah c bon ça marche maintenant il me reste un dernier truc à faire si tu peux m'aider...
 
bon ca ca compte tout une table: count(*)
 
mais quand on a des jointures dans la requete comment je peux compter qu'une tble?

HappyHarry

ludo2604 a écrit a écrit :

 
 
nan mais à la ligne OUI




 
tu veux pas afficher la requete avant qu'elle soit executée, comme ca a deja ete demandé ?

ludo2604

HappyHarry a écrit a écrit :

 
 
euh ... y a rien a pres le where ?




 
nan mais à la ligne OUI

HappyHarry

ludo2604 a écrit a écrit :

bon j'ai recolé le tout et ca marche comme ca :
 

Code :
  1. $query = '
  2.   SELECT t1.id, t1.nom, t1.infos, t2.titre, t2.id_artistes, t2.id_lyrics 
  3.   FROM artistes As t1 LEFT join chansons As t2 On (t1.id = t2.id_artistes) WHERE ';


 
 




 
euh ... y a rien a pres le where ?

ludo2604 bon j'ai recolé le tout et ca marche comme ca :
 

Code :
  1. $query = '
  2.   SELECT t1.id, t1.nom, t1.infos, t2.titre, t2.id_artistes, t2.id_lyrics 
  3.   FROM artistes As t1 LEFT join chansons As t2 On (t1.id = t2.id_artistes) WHERE ';


 

ludo2604 javais oublié de mettre DISTINCT............
 
mais c pas  [:xx_xx]
ludo2604 bon n'y a t il pas un autre moyen de faire des jointures parcequ'aparement ca veut pas passer :/
ludo2604 whow merci pour vos réponses...
 
ALors donc le LEFT join si ça marche tres bien avec touts mes autres scripts mais là avec je sais pas pk il veut pas.
 
J'essaye tt de suite htmlentites($query) et je vous tiens au courant
omega2

Sh@rdar a écrit a écrit :

J'utilise une vieille version en plus (3.23.41) ça fait un moment que c'est supporté, y a qu'a jeter un coup d'oeil à la doc :
 
 
MySQL utilise les syntaxes suivantes pour les commandes de JOIN:  
 
table_reference, table_reference
table_reference [CROSS] JOIN table_reference
table_reference INNER JOIN table_reference
table_reference STRAIGHT_JOIN table_reference
table_reference LEFT [OUTER] JOIN table_reference ON conditional_expression  
table_reference LEFT [OUTER] JOIN table_reference USING (column_list)
table_reference NATURAL LEFT [OUTER] JOIN table_reference
{ oj table_reference LEFT OUTER JOIN table_reference ON conditional_expression  }
 
 



Alors autant pour moi.
Du coup, je pourais faire certains trucs plus facilement que ce que je croyais.

Sh@rdar J'utilise une vieille version en plus (3.23.41) ça fait un moment que c'est supporté, y a qu'a jeter un coup d'oeil à la doc :
 
 
MySQL utilise les syntaxes suivantes pour les commandes de JOIN:  
 
table_reference, table_reference
table_reference [CROSS] JOIN table_reference
table_reference INNER JOIN table_reference
table_reference STRAIGHT_JOIN table_reference
table_reference LEFT [OUTER] JOIN table_reference ON conditional_expression  
table_reference LEFT [OUTER] JOIN table_reference USING (column_list)
table_reference NATURAL LEFT [OUTER] JOIN table_reference
{ oj table_reference LEFT OUTER JOIN table_reference ON conditional_expression  }
 
bozocarzu sa marche sur free
omega2

Sh@rdar a écrit a écrit :

uuh.. j'utilise des LEFT JOIN à gogo dans mes script et ça fonctionne super bien...



Même avec mysql ??? :o
Si c'est le cas, j'en suis vraiment étoné.
Va faloir que j'ailles voir sur free.fr et multimania, si ca marche aussi chez eux.

Sh@rdar uuh.. j'utilise des LEFT JOIN à gogo dans mes script et ça fonctionne super bien...
omega2

bozocarzu a écrit a écrit :

Oui c'est mysql qu'utilise ludo



Alors il va faloir qu'il ce démerde autrement pour obtenir le même réultat que ce qu'il aurait eu avec sa requête.
C'est chiant de devoir changer de logique dans une partie d'un programme pour simuler une jointure partielle mais a ma conaissance, avec mysql, il y a pas d'autre moyen.

bozocarzu Oui c'est mysql qu'utilise ludo
omega2 Question con, c'est quoi la base de donnée utiliser?
Si c'est mysql, t'as pas besoin de chercher lus loin, mysql ne sait pas utiliser des jointure de type "LEFT join" (et autres jointures dites non parfaites).
bozocarzu Il il devrais faire un echo"$query" pour voir a quoi elle ressemble !
Sh@rdar bah.. je fait que traiter les champs du moteur de recherche un par un, une fois la requête générée, tu la teste et tu vois très vite d'ou peux venir l'erreur (en fonction du msg MySQL).
 
 
pour le problème original, je pencherais pour un WHERE en trop), sans conditions si jamais rien n'est coché dans le formulaire, mais il faurdrait vrament voir la requête entière après traitement du formulaire.
bozocarzu Du moment que ta requete fonctionne, temps meiux, mais si il y as une erreur dans ton code, bonne chance pour la trouver !!
Sh@rdar

bozocarzu a écrit a écrit :

Si sa marche !!!




 
 :??:  :??:

bozocarzu Si sa marche !!!
Sh@rdar pour mon moteur de recherche d'article dans une boutique en ligne :
 

Code :
  1. $Req = "SELECT DISTINCTROW
  2.   $Articles_Tbl.Id, $Articles_Tbl.Prix, $Articles_Tbl.Cat1, $Articles_Tbl.Cat2, $Articles_Tbl.Code_Interne,
  3.   $Articles_Tbl.Dispo, $Articles_Tbl.Promo, $Articles_Tbl.Poids, $Articles_Tbl.Tva, $Desc_articles_Tbl.Nom_$Lang,
  4.   $Desc_articles_Tbl.Desc_$Lang, $Fournisseur_Tbl.Nom as Fournisseur, $Categories_Tbl.Lvl
  5.   FROM $Articles_Tbl
  6.   LEFT JOIN $Desc_articles_Tbl ON $Articles_Tbl.Id = $Desc_articles_Tbl.Idx
  7.   LEFT JOIN $Fournisseur_Tbl ON $Fournisseur_Tbl.Id = $Articles_Tbl.Fournisseur
  8.   LEFT JOIN $Categories_Tbl ON $Categories_Tbl.Id=$Articles_Tbl.Cat1
  9.   WHERE $Articles_Tbl.Visible=1 ";
  10.   // MODIFICATION DE LA REQUETE EN FONCTION DES PARAMETRES DE LA PAGE DE RECHERCHE AVANCEE
  11.   if ($HTTP_POST_VARS["search"]=="Lancer la recherche" ) {
  12.     if ($HTTP_POST_VARS["Cat"]!=0) $Req .= "AND $Articles_Tbl.Cat1=".$HTTP_POST_VARS["Cat"]." OR $Articles_Tbl.Cat2=".$HTTP_POST_VARS["Cat"];
  13.     if (isset($HTTP_POST_VARS["Ref"]) && $HTTP_POST_VARS["Ref"]!='') $Req .= "AND $Articles_Tbl.Code_interne LIKE '%".$HTTP_POST_VARS["Ref"]."%' ";
  14.     if ($HTTP_POST_VARS["Fournisseur"]!=0) $Req .= " AND $Articles_Tbl.Fournisseur=".$HTTP_POST_VARS["Fournisseur"];
  15.     if ($HTTP_POST_VARS["Dispo"]>=0) $Req .= " AND $Articles_Tbl.Dispo >=".$HTTP_POST_VARS["Dispo"];
  16.     if(isset($HTTP_POST_VARS["Prix_Min"]) && $HTTP_POST_VARS["Prix_Min"]!='') $Prix_min = str_replace(",",".",$HTTP_POST_VARS["Prix_Min"]);
  17.     if(isset($HTTP_POST_VARS["Prix_Max"]) && $HTTP_POST_VARS["Prix_Max"]!='') $Prix_max = str_replace(",",".",$HTTP_POST_VARS["Prix_Max"]);
  18.     if ($HTTP_POST_VARS["tva"]==1) {
  19.       $Prix_min = number_format((100*$Prix_min)/($Tva[0]+100),2);
  20.       $Prix_max = number_format((100*$Prix_max)/($Tva[0]+100),2);
  21.     }
  22.     if ($HTTP_POST_VARS["Prix_Min"]!='' && $HTTP_POST_VARS["Prix_Max"]!='') $Req .= " AND $Articles_Tbl.Prix BETWEEN $Prix_min AND $Prix_max ";
  23.     elseif ($HTTP_POST_VARS["Prix_Min"]!='' && $HTTP_POST_VARS["Prix_Max"]=='') $Req .= " AND $Articles_Tbl.Prix >= $Prix_min ";
  24.     elseif ($HTTP_POST_VARS["Prix_Min"]=='' && $HTTP_POST_VARS["Prix_Max"]!='') $Req .= " AND $Articles_Tbl.Prix <= $Prix_max";
  25.     if ($HTTP_POST_VARS["Promo"]==1) $Req.= " AND $Artcles_Tbl.Promo!=0";
  26.     if ($HTTP_POSt_VARS["Focus"]==1) $Req .= " AND $Articles_Tbl.Focus!=0";
  27.     $Keywords = $HTTP_POST_VARS["Keywords"];
  28.     if ($Keywords!='') {
  29.       $Keywords = explode(" ",$Keywords);
  30.       $Req .= "AND ( $Desc_articles_Tbl.Desc_$Lang LIKE '%".$Keywords[0]."%' OR $Desc_articles_Tbl.Nom_$Lang LIKE '%".$Keywords[0]."%' OR $Desc_articles_Tbl.Spectech_$Lang LIKE '%".$Keywords[0]."%'";
  31.       for ($i = 1 ; $i<count($Keywords) ; $i++) {
  32.         $Req .= " OR $Desc_articles_Tbl.Desc_$Lang LIKE '%".$Keywords[0]."%' OR $Desc_articles_Tbl.Nom_$Lang LIKE '%".$Keywords[0]."%' OR $Desc_articles_Tbl.Spectech_$Lang LIKE '%".$Keywords[0]."%'";
  33.       }
  34.       $Req .= " )";
  35.     }
  36.   }

Sh@rdar bin pour un moteur de recherche t'as pas trop le choix, faut la modifier selon le formulaire de recherche et c'est pas toujours très drôle
bozocarzu Oui, se que je veut dire par fou, c'est la façon dont elle est construite !
Sh@rdar tu pourrais faire un echo htmlentites($query) avant de balancer la requête pour voir sa tronche ? (peut être uin pb d'espace ou de virgule selon les argumetns passés)
 
ensuite tu la colle dans phpmyadmin pour voir un peu quel est le problème
 
bozocarzu >> bin c'est qu'une requête SQL tout ce qu'il y de plus normale :D en ce moment j'tape les même mais avec jointures sur tables, ça tourne super bien.
bozocarzu C'est quoi cette requete de fou ?
ludo2604

bozocarzu a écrit a écrit :

C'est quoi le WHERE qui est a la fin ??




 
bein c normal c construi comme ça ya la suite apres ça marche quand ya pas de jointures donc c pas ca ;)
 
voila le code en fait :
 

Code :
  1. $query = 'SELECT t1.id,t1.nom,t1.infos,t2.titre,t2.id_artistes,t2.id_lyrics FROM ';
  2. $query .= artistes As t1 LEFT join chansons As t2 On t1.id=t2.id_artistes.' WHERE ';
  3. if($cat!="all" )
  4. {
  5. $query .= 'id = "' . $cat . '" AND ';
  6. }
  7. $query .= 'nom LIKE "%' . $search . '%" ';
  8. $query .= 'OR infos LIKE "%' . $search . '%" ';
  9. $query .= 'OR titre LIKE "%' . $search . '%" ';
  10. $query .= 'ORDER BY "' . $tri . '" ';
  11. $query .= $sens . ' ';
  12. $query .= 'LIMIT ';
  13. $query .= $debut . ',';
  14. $query .= $nb;

bozocarzu C'est quoi le WHERE qui est a la fin ??
ludo2604 saut,
c'est pour un moteur de recherche, je voudrai mettre des jointures car j'ai besoin de plusieurs tables...
 
Voila ce que j'ai mis pour le debut de la requete :
 

Code :
  1. $query = 'SELECT t1.id,t1.nom,t1.infos,t2.titre,t2.id_artistes,t2.id_lyrics FROM ';
  2. $query .= artistes As t1 LEFT join chansons As t2 On t1.id=t2.id_artistes.' WHERE ';


 
cette meme requete fonctionne pourtant correctement avec un autre script mais là ca passe pas :/ bizzare.....
 


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)