2010-05-03 8 views
2

Ici, j'ai besoin d'aide pour les jointures. J'ai deux tables disent des articles et des utilisateurs. lors de l'affichage des articles, je dois aussi afficher les informations utilisateur comme nom d'utilisateur, etc. Alors, il vaudra mieux utiliser les jointures pour rejoindre les articles et les tables utilisateur pour récupérer les informations utilisateur tout en affichant des articles comme ci-dessous.en utilisant des jointures ou plusieurs requêtes dans php/mysql

SELECT a.*,u.username,u.id FROM articles a JOIN users u ON u.id=a.user_id 

OU peut celui-ci en PHP. Tout d'abord je reçois les articles avec ci-dessous sql

SELECT * FROM articles 

Puis, après je reçois le tableau des articles boucle i bien et obtenir les informations utilisateur dans chaque boucle comme ci-dessous

SELECT username, id FROM users WHERE id='".$articles->user_id."'; 

Ce qui est mieux que je peux avoir explication sur pourquoi aussi. Nous vous remercions de votre réponse ou de vos commentaires

Répondre

5

Il existe une troisième option. Vous pouvez d'abord obtenir les articles:

SELECT * FROM articles 

ensuite obtenir tous les noms d'utilisateurs concernés en une seule fois:

SELECT id, username FROM users WHERE id IN (3, 7, 19, 34, ...) 

De cette façon, il suffit de frapper la base de données deux fois au lieu de plusieurs fois, mais vous n N'obtenez pas de données dupliquées. Cela dit, il semble que vous n'avez pas beaucoup de données dupliquées dans vos requêtes de sorte que la première requête fonctionnerait bien aussi dans ce cas précis.

Je choisirais probablement votre première option dans ce cas précis en raison de sa simplicité, mais si vous avez besoin de plus d'informations pour chaque utilisateur, alors choisissez la troisième option. Je ne choisirais probablement pas votre deuxième option car elle n'est ni la plus rapide ni la plus simple.

+0

Comment afficher les informations utilisateur de cette manière? Si c'est le cas, je dois afficher userinfo à partir de l'ID d'article 1. – Yalamber

+0

Convertissez d'abord les résultats dans des tableaux associatifs, puis passez en revue le tableau d'articles à l'aide d'une recherche dans le tableau users pour obtenir les informations utilisateur nécessaires. –

+0

Bonjour pouvez-vous élaborer un peu dira php codes? – Yalamber

2

La première approche est mieux le cas échéant/possible:

SELECT a.*, u.username, u.id 
FROM articles a 
JOIN users u ON u.id = a.user_id 
  • Vous devez écrire moins de code
  • Il n'y a pas besoin d'exécuter plusieurs requêtes
  • avec des jointures est idéal lorsque cela est possible
+3

+1.Il peut y avoir des raisons d'aller dans l'autre sens (sélectionner tous les utilisateurs à la fois car une réponse est aussi intelligente), mais MySQL a mis du temps à optimiser les jointures et si vous êtes indexé correctement, il devrait être rapide les résultats facilement de plusieurs façons. De plus, je trouve de plus en plus que le fait de lancer plus de CPU/RAM est plus facile que de maintenir une base de code hautement optimisée mais difficile à maintenir. Je penche totalement pour "évincer tout le nickel de mes serveurs" mais ça n'en vaut vraiment pas la peine et mon psychiatre et les gars de Tweakers-Anon m'ont beaucoup aidé. – Hans

+0

@Hans: yup je suis d'accord à votre point de vue :) – Sarfraz

+0

Je suis confus à la copie de données que les gens font ressortir ici. Avons-nous des données en double tout en faisant des jointures? Comment puis-je sélectionner les utilisateurs en une fois après avoir sélectionné les articles. Si vous comprenez que je fais cela en php en utilisant foreach loop pour montrer des articles dans une page. merci – Yalamber

3

Cela dépend de la quantité de données renvoyées par les requêtes - si vous obtenez beaucoup de données en double (par ex. L'utilisateur a écrit de nombreux articles) vous feriez mieux de faire les requêtes séparément.

Si vous n'avez pas beaucoup de données en double, les jointures sont toujours préférables car il vous suffit d'effectuer une seule visite sur le serveur de base de données.

+0

Oui, un utilisateur peut avoir beaucoup d'articles. il a beaucoup de relations je pense. Un utilisateur peut avoir beaucoup d'articles. et un article sera lié à un seul utilisateur. Ainsi, les utilisateurs ont beaucoup de relations avec les articles – Yalamber

0

Obtenez les articles avec une requête, puis obtenez chaque nom d'utilisateur une fois et pas chaque fois que vous l'affichez (cachez-les dans un tableau ou autre).

Questions connexes