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

  FORUM HardWare.fr
  Programmation
  PHP

  Left join est ce la bonne solution?

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Left join est ce la bonne solution?

n°436795
coconutes4
Posté le 23-06-2003 à 14:22:24  profilanswer
 

Salut:)
J'ai deux tables :
une table A
et une table  B
 
j'aimerais affiché le contenu des deux tables en même  temps lorsque A.champs=b.champs
 
Plus concrétement : une table aliment : un champs a_id , aliment et fruit_id
et dans ma table fruit: un champs f_id et un champs fruit
 
je voudrais afficher tout le contenue des aliments quand fruit_id=f_id
 
 
j'ai utlisé la fonction left join mais sans resultat :(
SELECT * FROM aliment LEFT JOIN fruit ON(aliment.fruit_id=fruit.f_id)
 
qq peut m'aider ?:(

mood
Publicité
Posté le 23-06-2003 à 14:22:24  profilanswer
 

n°436861
MagicBuzz
Posté le 23-06-2003 à 15:02:31  profilanswer
 

te casse pas la tête avec le jargon à deux balles SQL que personne de devrait utiliser.
 
Vas-y à la bourrin comme Oracle ça marche très bien et y'a aucune différence de perfs contrairement à ce qu'on pourrait croire.
 
select a.*, b*
from a, b
where a.f_id = b.fruit_id

n°436872
coconutes4
Posté le 23-06-2003 à 15:15:31  profilanswer
 

dans ce cas la la même ligne de la table est répété x fois limité par LIMIT :(

n°436890
MagicBuzz
Posté le 23-06-2003 à 15:30:23  profilanswer
 

certainement pas.
 
explique ce que tu veux, parceque ma requête est bonne et ne rammène aucun doublon...

n°436898
docwario
Alea jacta est
Posté le 23-06-2003 à 15:38:32  profilanswer
 

dans le pire des cas tu met distinct apres elect pour eviter les doublons.
 
mais le left join c utile uniquement si l egalité des champs n est po toujour respecter.
 
exemple simple.
table new, et table commentaire
( il y a 0 ou X commentaire a une news )
 
si tu fais une requete du type
select news.id_news, count(commentaire.id_commentaire) from news, commentaire where news.id_news = commentaire.id_news
 
elle te donnera seulement les news qui ont au moins un commentaire.
 
alors que si tu fais
select news.id_news, count(commentaire.id_commentaire) from news left join commentaire on (news.id_news = commentaire.id_news)
tu auras toutes les news avec celles ki n ont po de commentaire.

n°437002
coconutes4
Posté le 23-06-2003 à 16:10:24  profilanswer
 

SELECT * FROM $table,$tab_cat where $table.cat=$tab_cat.ca_id order by n_id DESC LIMIT 20
 
vala ma requete qui m'affiche des doublons:(

n°437011
Sh@rdar
Ex-PhPéteur
Posté le 23-06-2003 à 16:14:07  profilanswer
 

MagicBuzz a écrit :

te casse pas la tête avec le jargon à deux balles SQL que personne de devrait utiliser.
 
Vas-y à la bourrin comme Oracle ça marche très bien et y'a aucune différence de perfs contrairement à ce qu'on pourrait croire.
 
select a.*, b*
from a, b
where a.f_id = b.fruit_id


 
sous MySQL cette syntaxe est équivalente au JOIN standard


---------------
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°437094
MagicBuzz
Posté le 23-06-2003 à 17:18:25  profilanswer
 

Sh@rdar a écrit :


 
sous MySQL cette syntaxe est équivalente au JOIN standard  


Ben oui, mais je vois pas ce qu'il veut d'autre... Y'a deuxc tables avec une clé étrangère, faut faire un join tout bêteun point c'est tout... Ou alors il explique mal son problème.
 
Déjà, si on avait une idée de la structure des tables, ça irait mieu... Et avec un petit exemple de données aussi...

n°437280
coconutes4
Posté le 23-06-2003 à 20:24:24  profilanswer
 

$table: champs n_id,auteur,titre,cat
cat represente l'id de ---> $tab_cat: ca_id,categorie
 
je voudrais affiché toute les news de la  maniére suivante:
CAT (correspondant au chamsp categorie quand ca_id=cat
Titre (de la table news)
Par auteur...
 
 
 
SELECT * FROM $table,$tab_cat where $table.cat=$tab_cat.ca_id order by n_id DESC LIMIT 20

n°437381
MagicBuzz
Posté le 23-06-2003 à 21:02:58  profilanswer
 

Y'a un truc qui est bien avec toi, c'est que t'es pas du tout avare en infos et explications... Je m'en fout de ce que tu veux faire, si je sais pas à quoi ressemblent tes tables et ce qu'il y a dedans ;)
 
Bon, sinon, je vois pas trop ton truc là... Finalement, t'as pris la requête que je t'ai filé... :heink:
 
Et pourquoi des fruits se sont subitement transformés en news :heink:

mood
Publicité
Posté le 23-06-2003 à 21:02:58  profilanswer
 

n°437390
coconutes4
Posté le 23-06-2003 à 21:12:31  profilanswer
 

heu c'était pour faire plus facile:(
oui j'ai essayé au depart comme toi puis avec left join ...

n°437401
MagicBuzz
Posté le 23-06-2003 à 21:19:36  profilanswer
 

Donc, poste un EXEMPLE de ce que contiennent chacunes de tes tables, et un EXEMPLE de ce que tu veux au final.
 
Les tables possèdent-elles des doublons ?

n°437409
coconutes4
Posté le 23-06-2003 à 21:23:45  profilanswer
 

--->
$table: champs n_id,auteur,titre,cat
cat represente l'id de ---> $tab_cat: ca_id,categorie
 
je voudrais affiché toute les news de la  maniére suivante:
CAT (correspondant au chamsp categorie quand ca_id=cat
Titre (de la table news)
Par auteur...
 
 
 
SELECT * FROM $table,$tab_cat where $table.cat=$tab_cat.ca_id order by n_id DESC LIMIT 20  

n°437413
MagicBuzz
Posté le 23-06-2003 à 21:27:41  profilanswer
 

:sarcastic:
 
Y'a pas moyen d'avoir un exemple hein :o
 
Bon, ben donc cette requête est bonne.
 
select cat.categorie, news.titre, news.auteur
from $tab_cat cat, $table news
where news.cat = cat.ca_id
order by news.auteur

n°437810
coconutes4
Posté le 24-06-2003 à 11:22:39  profilanswer
 

BON lol:)
L'erreur ne vient pas de là , en fait j'ai créer une fonction dans laquelle je selectionne d'abord dans une table la presentation puis dans la table news les dernieres news que j'affiche avec la presentation adequate...
 
voila mon code:

Code :
  1. <?
  2. function last_news(){ //On nomme la fonction et on l'ouvre
  3. global $table; // Lezs globals c'st toujour mieux:p
  4. global $tab_membres; // Lezs globals c'st toujour mieux:p
  5. global $tab_infocat; // Lezs globals c'st toujour mieux:p
  6. global $tab_cat; // Lezs globals c'st toujour mieux:p
  7. $reket = "SELECT titre FROM $tab_infocat";
  8. $present_reket = mysql_query($reket);
  9. $present_tab=mysql_fetch_array($present_reket);
  10. $present=$present_tab[titre];
  11. $reket2=mysql_query("SELECT * FROM $table,$tab_cat where $table.cat=$tab_cat.ca_id order by n_id DESC LIMIT 20 " );
  12. while($tab_news = mysql_fetch_array($reket2))
  13. {
  14. $present=change_present($present,$tab_news);
  15. echo "$present ";
  16. }
  17. }


 
change_present est une fonction qui remaplce le contenu de $present par les bonnes variables : genre $tab_news[auteur] etc...
et quand j'affiche le resultat je n'ais que des doubkons:(

n°438099
coconutes4
Posté le 24-06-2003 à 15:30:48  profilanswer
 

heu :(

n°438438
MagicBuzz
Posté le 24-06-2003 à 19:28:40  profilanswer
 

du tu fais une boucle, c'est normal :heink:
 
faudrait peut-être mettre un filtre sur l'id dans la requête qui est dans la boucle...

n°438487
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 24-06-2003 à 21:17:37  profilanswer
 

MagicBuzz a écrit :

te casse pas la tête avec le jargon à deux balles SQL que personne de devrait utiliser.
 
Vas-y à la bourrin comme Oracle ça marche très bien et y'a aucune différence de perfs contrairement à ce qu'on pourrait croire.
 
select a.*, b*
from a, b
where a.f_id = b.fruit_id

heu ouais m'enfin un LEFT JOIN et JOIN c'est quand même completement différent :heink:


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°438553
MagicBuzz
Posté le 24-06-2003 à 23:10:11  profilanswer
 

Ouais, désolé, un left join (enfin, je préfère la syntaxe complète left outer join ou right outer join) c'est :
 

select a.*, b*  
from a, b  
where a.f_id = b.fruit_id(+)


 
Pas exemple, s'il y a plus d'éléments dans a que dans b
Sinon, le (+) se met à côté de f_id dans l'autre sens.
 
M'enfin vu la structure de la table, c'était tellement trivial que ce soit un inner join que je me suis pas posé la question :p
 
Avec SQL Server, on remplacera le + par une *


Message édité par MagicBuzz le 24-06-2003 à 23:11:19
n°438654
coconutes4
Posté le 25-06-2003 à 08:45:00  profilanswer
 

c'est bon lol;)
fallait que je mette ma premiere requete a l'interieur d ema boucle:)
 
j'ai compris pr left join $On () merci;)

n°444753
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 01-07-2003 à 00:12:20  profilanswer
 

MagicBuzz a écrit :

Ouais, désolé, un left join (enfin, je préfère la syntaxe complète left outer join ou right outer join) c'est :
 

select a.*, b*  
from a, b  
where a.f_id = b.fruit_id(+)




Ca c'est une syntaxe à la oracle, c'est pas la syntaxe officielle du SQL


Message édité par joce le 01-07-2003 à 00:12:38

---------------
Protèges carnets personnalisés & accessoires pour bébé
n°444973
MagicBuzz
Posté le 01-07-2003 à 11:12:10  profilanswer
 

joce a écrit :


Ca c'est une syntaxe à la oracle, c'est pas la syntaxe officielle du SQL


La syntaxe officielle est pourrie, même SQL Server et Access supprtent la syntaxe Oracle (en remplaçant le (+) pas =* ou *= :D)

n°449644
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 06-07-2003 à 13:34:50  profilanswer
 

MagicBuzz a écrit :


La syntaxe officielle est pourrie, même SQL Server et Access supprtent la syntaxe Oracle (en remplaçant le (+) pas =* ou *= :D)

ouais donc c'est pas standard :kaola:
LEFT JOIN c'est très bien comme syntaxe, et ca fonctionne très bien avec MySQL :D


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°450432
MagicBuzz
Posté le 07-07-2003 à 17:25:01  profilanswer
 

Ca marche très bien aussi avec SQL Server, saut que c'est purement illisible, je vomis à chaque fois que je la vois.
 
Je préfère encore faire mes jointures sans indiquer les champs de jointures, et en activant le cheminement par clés étrangères, au moins c'est pourri, mais c'est lisible. (PS: cette méthode est standard aussi, c'est pour ça qu'existe les clé étrangères à la base, avant de vérifier l'intégrité)


Message édité par MagicBuzz le 07-07-2003 à 17:25:38
mood
Publicité
Posté le   profilanswer
 


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

  Left join est ce la bonne solution?

 

Sujets relatifs
Comment faire d'une solution VBA un programme .exe ?Pourquoi ça fait chelou sous IE ? [+ SOLUTION]
Solution menu dynamiquesolution autre que header
[GUI]trouver la bonne hauteur pour un panel[VC++] Problème de Rect et de coordonnées...[Solution et Question]
[MFC] Utiliser les SpinButtonCtrl [résolu, solution inside]C : help je ne trouve pas l'erreur (solution trouver merci)
besoin de bonne source pour apprendre le C[C/C++] trouver une BONNE idée de projet
Plus de sujets relatifs à : Left join est ce la bonne solution?


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