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

  FORUM HardWare.fr
  Programmation

  [ php ] jointures problemes

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ php ] jointures problemes

n°208114
ludo2604
kitsch' me if u can
Posté le 03-09-2002 à 17:11:10  profilanswer
 

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.....
 


---------------
Make Portraits, Not War!  
mood
Publicité
Posté le 03-09-2002 à 17:11:10  profilanswer
 

n°208119
bozocarzu
Posté le 03-09-2002 à 17:15:29  profilanswer
 

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

n°208126
ludo2604
kitsch' me if u can
Posté le 03-09-2002 à 17:20:56  profilanswer
 

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;


---------------
Make Portraits, Not War!  
n°208135
bozocarzu
Posté le 03-09-2002 à 17:30:49  profilanswer
 

C'est quoi cette requete de fou ?

n°208140
Sh@rdar
Ex-PhPéteur
Posté le 03-09-2002 à 17:36:13  profilanswer
 

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.


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
n°208143
bozocarzu
Posté le 03-09-2002 à 17:38:32  profilanswer
 

Oui, se que je veut dire par fou, c'est la façon dont elle est construite !

n°208146
Sh@rdar
Ex-PhPéteur
Posté le 03-09-2002 à 17:41:05  profilanswer
 

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


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
n°208148
Sh@rdar
Ex-PhPéteur
Posté le 03-09-2002 à 17:42:33  profilanswer
 

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.   }


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
n°208152
bozocarzu
Posté le 03-09-2002 à 17:49:49  profilanswer
 

Si sa marche !!!

n°208154
Sh@rdar
Ex-PhPéteur
Posté le 03-09-2002 à 17:52:20  profilanswer
 

bozocarzu a écrit a écrit :

Si sa marche !!!




 
 :??:  :??:


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
mood
Publicité
Posté le 03-09-2002 à 17:52:20  profilanswer
 

n°208156
bozocarzu
Posté le 03-09-2002 à 17:56:49  profilanswer
 

Du moment que ta requete fonctionne, temps meiux, mais si il y as une erreur dans ton code, bonne chance pour la trouver !!

n°208159
Sh@rdar
Ex-PhPéteur
Posté le 03-09-2002 à 18:01:36  profilanswer
 

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.


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
n°208166
bozocarzu
Posté le 03-09-2002 à 18:17:31  profilanswer
 

Il il devrais faire un echo"$query" pour voir a quoi elle ressemble !

n°208168
omega2
Posté le 03-09-2002 à 18:29:35  profilanswer
 

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).

n°208169
bozocarzu
Posté le 03-09-2002 à 18:31:25  profilanswer
 

Oui c'est mysql qu'utilise ludo

n°208170
omega2
Posté le 03-09-2002 à 18:36:12  profilanswer
 

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.

n°208171
Sh@rdar
Ex-PhPéteur
Posté le 03-09-2002 à 18:37:48  profilanswer
 

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


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
n°208173
omega2
Posté le 03-09-2002 à 18:40:34  profilanswer
 

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.

n°208174
bozocarzu
Posté le 03-09-2002 à 18:41:47  profilanswer
 

sa marche sur free

n°208177
Sh@rdar
Ex-PhPéteur
Posté le 03-09-2002 à 18:45:19  profilanswer
 

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  }
 


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
n°208182
omega2
Posté le 03-09-2002 à 18:49:35  profilanswer
 

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.

n°208198
ludo2604
kitsch' me if u can
Posté le 03-09-2002 à 19:22:52  profilanswer
 

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


---------------
Make Portraits, Not War!  
n°208204
ludo2604
kitsch' me if u can
Posté le 03-09-2002 à 19:30:31  profilanswer
 

bon n'y a t il pas un autre moyen de faire des jointures parcequ'aparement ca veut pas passer :/


---------------
Make Portraits, Not War!  
n°208225
ludo2604
kitsch' me if u can
Posté le 03-09-2002 à 20:27:50  profilanswer
 

javais oublié de mettre DISTINCT............
 
mais c pas  [:xx_xx]


---------------
Make Portraits, Not War!  
n°208230
ludo2604
kitsch' me if u can
Posté le 03-09-2002 à 20:40:34  profilanswer
 

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 ';


 


---------------
Make Portraits, Not War!  
n°208249
HappyHarry
Posté le 03-09-2002 à 21:28:55  profilanswer
 

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 ?

n°208279
ludo2604
kitsch' me if u can
Posté le 03-09-2002 à 22:48:17  profilanswer
 

HappyHarry a écrit a écrit :

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




 
nan mais à la ligne OUI


---------------
Make Portraits, Not War!  
n°208280
HappyHarry
Posté le 03-09-2002 à 22:48:55  profilanswer
 

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é ?

n°208288
ludo2604
kitsch' me if u can
Posté le 03-09-2002 à 23:01:19  profilanswer
 

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?


---------------
Make Portraits, Not War!  
n°208455
omega2
Posté le 04-09-2002 à 11:38:59  profilanswer
 

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. ;)

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [ php ] jointures problemes

 

Sujets relatifs
problemes avec les fonctions IMAP - [ PHP inside ][c] divers problèmes
[php] erreur tres bizzare avec les jointures-need help !Problémes avec form_load()
Problêmes avec sql serveur et le format textProblemes de raffraichissement
[delphi] Problemes avec DBCtrlGrid[PHP] 2 problèmes pour le prix d'1
Problemes d'applet (class not found) ...J'ai des problemes avec mes tableaux en HTML
Plus de sujets relatifs à : [ php ] jointures problemes


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR