Besoin d'aide avec SQL JOIN

  • Bogey
  • Bogey
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Juil 14, 2005
  • Messages: 8211
  • Loc: USA
  • Status: Offline

Message Mai 13th, 2011, 3:00 pm

Im travaillant sur un projet et il faut me joindre à l'information d'un tableau avec les informations d'une autre table. J'ai obtenu ce travail, mais le problème, c'est qu'il se joint à tout de la table user avec l'autre.

Je veux que d'adhérer uniquement comme 3 champs au lieu de tous.

PHP Code: [ Select ]
'SELECT'          => '*',
'FROM'            => FORUM_THREAD,
'RIGHT JOIN'      => USER_TABLE,
'ON'              => '`' . FORUM_THREAD . '`.`threadPosterID` = `' . USER_TABLE . '`.`userID`',
'WHERE'           => '`' . FORUM_THREAD . '`.`threadID` = ' . $tid
  1. 'SELECT'          => '*',
  2. 'FROM'            => FORUM_THREAD,
  3. 'RIGHT JOIN'      => USER_TABLE,
  4. 'ON'              => '`' . FORUM_THREAD . '`.`threadPosterID` = `' . USER_TABLE . '`.`userID`',
  5. 'WHERE'           => '`' . FORUM_THREAD . '`.`threadID` = ' . $tid


Qui ressemble à ce qui suit une fois généré

SQL Code: [ Select ]
SELECT * FROM FORUM_THREAD RIGHT JOIN USER_TABLE ON `FORUM_THREAD`.`threadPosterID` = `USER_TABLE`.`userID` WHERE `FORUM_THREAD`.`threadID` = 2



Aussi, quel est la différence entre LEFT JOIN jointure droite et rejoindre ?
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • Anonymous
  • Bot
  • No Avatar
  • Inscription: 25 Feb 2008
  • Messages: ?
  • Loc: Ozzuland
  • Status: Online

Message Mai 13th, 2011, 3:00 pm

  • demonmaestro
  • Gold Member
  • Gold Member
  • Avatar de l’utilisateur
  • Inscription: Juin 21, 2006
  • Messages: 478
  • Loc: Conroe, Texas
  • Status: Offline

Message Mai 13th, 2011, 7:42 pm

pourquoi êtes-vous vouloir le rejoindre par une requête? pourquoi ne pas tirer 2 querys différents et puis de combiner les infos?
Thanks, Josh --DemonMaestro
www.LilNetwork.com
Fun Website www.ShoutsCloud.com
  • Bogey
  • Bogey
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Juil 14, 2005
  • Messages: 8211
  • Loc: USA
  • Status: Offline

Message Mai 13th, 2011, 8:50 pm

Pas sûr...tout était sous l'impression qu'il se joindre à travers une requête permet d'économiser de la bande passante et génère la page plus rapidement.

Quoi qu'il en soit, l'instruction SQL suivante résolu le problème...n'ont aucune idée de ce que je pensais qu'il s'agissait d'un problème lol
SQL Code: [ Select ]
SELECT FORUM_THREAD.*, USER_TABLE.userID, USER_TABLE.avatar, USER_TABLE.username, USER_TABLE.email FROM FORUM_THREAD RIGHT JOIN USER_TABLE ON `FORUM_THREAD`.`threadPosterID` = `USER_TABLE`.`userID` WHERE `FORUM_THREAD`.`threadID` = 2


Juste une question demeure...Quelle est la différence entre le droit JOIN, LEFT JOIN et d'y adhérer?
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • demonmaestro
  • Gold Member
  • Gold Member
  • Avatar de l’utilisateur
  • Inscription: Juin 21, 2006
  • Messages: 478
  • Loc: Conroe, Texas
  • Status: Offline

Message Mai 13th, 2011, 9:00 pm

Je ne suis pas sûr de la bande passante et la génération des pages plus rapide mais j'ai trouvé ce http://www.w3schools.com/sql/sql_join.asp comment toujours par la lecture qu'il dit que une ou plusieurs tables doivent avoir une même colonne envue de travailler...
Thanks, Josh --DemonMaestro
www.LilNetwork.com
Fun Website www.ShoutsCloud.com
  • Bogey
  • Bogey
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Juil 14, 2005
  • Messages: 8211
  • Loc: USA
  • Status: Offline

Message Mai 13th, 2011, 9:27 pm

Je ne sais pas...ils ne sont pas les mêmes colonnes que Im se joindre à eux par, mais ils travaillent. Donc, cette théorie est dans les livres.
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • WritingBadCode
  • Graduate
  • Graduate
  • Avatar de l’utilisateur
  • Inscription: Avr 28, 2011
  • Messages: 214
  • Loc: Sweden
  • Status: Offline

Message Mai 14th, 2011, 1:16 am

Lorsque vous utilisez LEFT JOIN ou RIGHT JOIN il n'ya pas vraiment "besoin" d'un "où" la déclaration lorsque vous utilisez jointure normale utiliser WHERE mais pas lorsque vous faites une gauche ou à droite rejoindre. Syntaxe pourrait être comme ça pendant une jointure gauche:

Code: [ Select ]
SELECT people.firstname, cars.whatcar FROM people LEFT JOIN cars ON people.p_id = cars.p_id


Qu'est ce code ne déclare d'abord ce qu'il essaie de sélectionner. dans ce cas, l'information provenant de deux tables: people.firstname et cars.whatcar (pour être plus précis le prénom de la table personnes et les informations de la table whatcar voitures).

Puis vient le rejoindre: des gens de LEFT JOIN voitures
Qu'est ce qu'il fait cela, il choisit deux tables de travailler contre (un peuple d'être et les autres voitures étant). Focus sont cependant sur le côté gauche dans une jointure gauche, ici vous pouvez voir ce tableau les gens sont sur la gauche et les voitures sur le droit, la différence est expliquée plus bas mais il faut noter ce qui est sur la gauche et à droite.

Que la ligne suivante ne:

Sur les voitures = people.p_id. p_id
Est-ce qu'il définit une instruction conditionnelle pour fonctionner JONCTION. Le prénom où existe people.p_id seront choisis quoi qu'il arrive. Et puis l'instruction conditionnelle est vérifié pour voir s'il ya un cars.p_id et si elle ne vient que compléter le long ainsi. Mais le cars.p_id pourrait très bien être vide où une people.p_id existe et, fondamentalement, vous obtiendrez une déclaration contenant prénom mais une valeur NULL pour la deuxième entrée.

Imaginons nous avons obtenu ces gens dans notre tableau de personnes:

Code: [ Select ]
p_id = 1;
name = "joe";

p_id = 2;
name = "mary";

p_id = 3;
name = "quirk";
  1. p_id = 1;
  2. name = "joe";
  3. p_id = 2;
  4. name = "mary";
  5. p_id = 3;
  6. name = "quirk";

Et cela dans notre tableau de voitures:

Code: [ Select ]
p_id = 1;
name = "Peugeot 308";

p_id = 2;
name = "Mercedes E63";

p_id = 4;
name = "Saab";
  1. p_id = 1;
  2. name = "Peugeot 308";
  3. p_id = 2;
  4. name = "Mercedes E63";
  5. p_id = 4;
  6. name = "Saab";


Notre énoncé de choisir dans le début nous donnerait ceci:
Joe possède la Peugeot 308, est propriétaire de Marie, la Mercedes E63, bizarrerie propriétaire (NULL). Fondamentalement, vous obtenez un retour sur bizarrerie, malgré qu'il ne possède pas de voiture (cela pourrait être un aspect très utile de gauche / droite se joint). Si vous voulez vérifier le statut de toutes les voitures (qui a obtenu un propriétaire et ce que la voiture n'a pas de propriétaire) que vous pouvez faire une des actions suivantes:

Code: [ Select ]
SELECT people.firstname, cars.whatcar FROM people RIGHT JOIN cars ON people.p_id = cars.p_id


L'accent est mis désormais sur la table de droite et le retour serait comme suit:
joe Peugeot propriétaire 308, Marie Mercedes E63 propriétaire, propriétaire de Saab (NULL). La bizarrerie personne n'est même pas mentionné, l'accent est maintenant sur le côté droit (CARS).

Code: [ Select ]
SELECT people.firstname, cars.whatcar FROM cars LEFT JOIN people ON people.p_id = cars.p_id


Fondamentalement, le mettant une jointure gauche et le branchement place avec les voitures et les gens de notre instruction de jointure!

Une jointure normale:
Code: [ Select ]
SELECT people.firstname, cars.whatcar FROM cars LEFT JOIN people WHERE (people.p_id = cars.p_id)


ne revenait que les choses où il ya un people.p_id ET un cars.p_id qui correspond. Fondamentalement, pas de valeurs NULL. C'est ce qui de retour de notre JOIN par exemple: joe propriétaire de la Peugeot 308, est propriétaire de Marie, la Mercedes E63.

Je ne suis pas sûr que ce soit utile ou de corriger, à tous les points. J'ai obtenu mon premier travail REJOINT il ya quelques jours! : P
  • Bogey
  • Bogey
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Juil 14, 2005
  • Messages: 8211
  • Loc: USA
  • Status: Offline

Message Mai 14th, 2011, 1:23 am

merci Awesome...ça aide beaucoup.

Une autre question...et une déclaration. Je ne suis pas en utilisant les mêmes noms de colonnes comme w3schools dit que je devrais et il fonctionne toujours...
"Bring forth therefore fruits meet for repentance:" Matthew 3:8

Afficher de l'information

  • Total des messages de ce sujet: 7 messages
  • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 109 invités
  • Vous ne pouvez pas poster de nouveaux sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas éditer vos messages
  • Vous ne pouvez pas supprimer vos messages
  • Vous ne pouvez pas joindre des fichiers
 
 

© 2011 Unmelted, LLC. Ozzu® est une marque déposée de Unmelted, LLC