web-dev-qa-db-fra.com

MySQL Inner Join Interroger plusieurs tables

J'essaie de joindre quelques tableaux et des exemples de la mise en page sont ci-dessous:

ordres

user_id=7 pricing id=37

prix_produits

id=37 product_id=33

des produits 

id=33 name=test product

SQL

SELECT *
FROM orders
  INNER JOIN products_pricing
    ON orders.pricing_id = products_pricing.id
  INNER JOIN products
    ON products_pricing.product_id = products.id
WHERE orders.user_id = '7' ");

annonces

id=233 user_id=7 url=test.com

Avec ce SQL, je reçois une sortie qui me donne tous les produits de l’utilisateur user_id de 7 et il listera chaque nom de produit dans une boucle while. Cependant, lorsque j'ajoute un autre INNER JOIN pour une table appelée listings, qui a une colonne user_id et que je dois saisir une URL pour chaque ligne correspondante, je peux ainsi créer un lien hypertexte entre les noms de produit et l'URL. comme la substance de travail ci-dessus. Je le fais très mal ou je manque quelque chose. J'ai passé quelques heures à essayer de comprendre mais je continue à obtenir le même résultat. Quelqu'un peut m'aider?

11
Daniel

Essaye ça:

SELECT 
  p.id,
  p.name,
  l.url,
  o.user_id,
  o.pricing_id
FROM orders AS o
INNER JOIN products_pricing AS pp ON o.pricing_id  = pp.id
INNER JOIN products         AS  p ON pp.product_id = p.id
INNER JOIN listings         AS  l ON l.user_id = o.user_id
WHERE o.user_id ='7' 
  AND l.id = 233 
  AND l.url = 'test.com';

Démo SQL Fiddle

Pour les exemples de données que vous avez publiés dans votre question, cela vous donnera:

| ID |        NAME |      URL | USER_ID | PRICING_ID |
------------------------------------------------------
| 33 | testproduct | test.com |       7 |         37 |
21
Mahmoud Gamal

Oui, cela peut être fait en utilisant la jointure INNER elle-même.et récupérez la colonne select dans l'instruction select.

SELECT 
  p.id,
  p.name,
  l.url,
  o.user_id,
  o.pricing_id
FROM orders AS o
INNER JOIN products_pricing AS pp ON o.pricing_id  = pp.id
INNER JOIN products         AS  p ON pp.product_id = p.id
INNER JOIN listings         AS  l ON l.user_id = o.user_id
WHERE o.user_id ='7' 
  AND l.id = 233 
  AND l.url = 'test.com';
0
user2001117