Left join est ce la bonne solution? - PHP - Programmation
Marsh Posté le 23-06-2003 à 15:02:31
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
Marsh Posté le 23-06-2003 à 15:15:31
dans ce cas la la même ligne de la table est répété x fois limité par LIMIT
Marsh Posté le 23-06-2003 à 15:30:23
certainement pas.
explique ce que tu veux, parceque ma requête est bonne et ne rammène aucun doublon...
Marsh Posté le 23-06-2003 à 15:38:32
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.
Marsh Posté le 23-06-2003 à 16:10:24
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
Marsh Posté le 23-06-2003 à 16:14:07
MagicBuzz a écrit : te casse pas la tête avec le jargon à deux balles SQL que personne de devrait utiliser. |
sous MySQL cette syntaxe est équivalente au JOIN standard
Marsh Posté le 23-06-2003 à 17:18:25
Sh@rdar a écrit : |
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...
Marsh Posté le 23-06-2003 à 20:24:24
$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
Marsh Posté le 23-06-2003 à 21:02:58
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é...
Et pourquoi des fruits se sont subitement transformés en news
Marsh Posté le 23-06-2003 à 21:12:31
heu c'était pour faire plus facile
oui j'ai essayé au depart comme toi puis avec left join ...
Marsh Posté le 23-06-2003 à 21:19:36
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 ?
Marsh Posté le 23-06-2003 à 21:23:45
--->
$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
Marsh Posté le 23-06-2003 à 21:27:41
Y'a pas moyen d'avoir un exemple hein
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
Marsh Posté le 24-06-2003 à 11:22:39
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 :
|
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
Marsh Posté le 24-06-2003 à 19:28:40
du tu fais une boucle, c'est normal
faudrait peut-être mettre un filtre sur l'id dans la requête qui est dans la boucle...
Marsh Posté le 24-06-2003 à 21:17:37
MagicBuzz a écrit : te casse pas la tête avec le jargon à deux balles SQL que personne de devrait utiliser. |
heu ouais m'enfin un LEFT JOIN et JOIN c'est quand même completement différent
Marsh Posté le 24-06-2003 à 23:10:11
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* |
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
Avec SQL Server, on remplacera le + par une *
Marsh Posté le 25-06-2003 à 08:45:00
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
Marsh Posté le 01-07-2003 à 00:12:20
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 :
|
Ca c'est une syntaxe à la oracle, c'est pas la syntaxe officielle du SQL
Marsh Posté le 01-07-2003 à 11:12:10
joce a écrit : |
La syntaxe officielle est pourrie, même SQL Server et Access supprtent la syntaxe Oracle (en remplaçant le (+) pas =* ou *= )
Marsh Posté le 06-07-2003 à 13:34:50
MagicBuzz a écrit : |
ouais donc c'est pas standard
LEFT JOIN c'est très bien comme syntaxe, et ca fonctionne très bien avec MySQL
Marsh Posté le 07-07-2003 à 17:25:01
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é)
Marsh Posté le 23-06-2003 à 14:22:24
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 ?