# Problème jointures et SQL, j'y arrive vraiment pas :(

**URL:** <https://www.debian-fr.org/t/probleme-jointures-et-sql-jy-arrive-vraiment-pas/2667>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 12:30 UTC](https://www.debian-fr.org/t/probleme-jointures-et-sql-jy-arrive-vraiment-pas/2667 "2016-02-20T12:30:56Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![nuitn0ire](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/n/e8c25b/32.png) [@nuitn0ire](https://www.debian-fr.org/u/nuitn0ire)\
**Post date:** [Février 20, 2016, 12:30 UTC](https://www.debian-fr.org/t/probleme-jointures-et-sql-jy-arrive-vraiment-pas/2667/1 "2016-02-20T12:30:56Z")

</div>

bonsoir,

voilà,par exemple j’ai 3 tables avec 3 champs chacune, mettons :

table 1 =\> champ1table1 champ2table1 champ3table1  
table 2 =\> champ1table2 champ2table2 champ3table2  
table 3 =\> champ1table3 champ2table3 champ3table3

Je voudrais tout simplement, dans un même tableau, sortir les 2 derniers enregistrement de chaque table. Je vois pas comment faire, j’ai essayé le tuto de phpbdébutant mais ça n’a rien donné…

En fait, je voudrais que ça donne ceci à l’affichage :

[code]champ1table1 champ2table1 champ3table1  
champ1table1 champ2table1 champ3table1

champ1table2 champ2table2 champ3table2  
champ1table2 champ2table2 champ3table2

champ1table3 champ2table3 champ3table3  
champ1table3 champ2table3 champ3table3[/code]

Dans ce contexte là (ou même simplifié), quelqu’un peut il me construire la requete que je vois ce que sa donne une fois construite ?

Je vous en serais très reconnaissant :\

---

<div class="post-metadata">

**Author:** ![fabrozor](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/439d5e/32.png) [@fabrozor](https://www.debian-fr.org/u/fabrozor)\
**Post date:** [Février 20, 2016, 12:30 UTC](https://www.debian-fr.org/t/probleme-jointures-et-sql-jy-arrive-vraiment-pas/2667/2 "2016-02-20T12:30:56Z")

</div>

Houlala, il va falloir que j’exhume mes cours 😉

---

<div class="post-metadata">

**Author:** ![Damsss](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/43a26b/32.png) [@Damsss](https://www.debian-fr.org/u/Damsss)\
**Post date:** [Février 20, 2016, 12:30 UTC](https://www.debian-fr.org/t/probleme-jointures-et-sql-jy-arrive-vraiment-pas/2667/3 "2016-02-20T12:30:57Z")

</div>

Avec SQL, tu fais une requête, SELECT pour selectionner les champs que tu veux afficher, FROM, depuis quels tables, et WHERE, les conditions de jointures et de selection.

En l’occurence, ça donne quelquechose du genre :

SELECT champ1, champ2, champ3  
FROM table1, table2, table3  
WHERE champ1.table1=champ1.table2  
AND champ2.table1=champ2.table2  
[etc, une suite de AND pour satisfaire les jointures]  
ORDER BY id DESC [l’id du champs, le dernier enregistrement ayant l’id le plus élevé, si c’est un champ en auto-incrémentation, groupé et sorti par ordre décroissant]

voilà, je te dis ça de mémoire, peut être c’est pas juste juste, mais je pense que ça l’est.

---

<div class="post-metadata">

**Author:** ![Ashgenesis](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/57b2e6/32.png) [@Ashgenesis](https://www.debian-fr.org/u/Ashgenesis)\
**Post date:** [Février 20, 2016, 12:30 UTC](https://www.debian-fr.org/t/probleme-jointures-et-sql-jy-arrive-vraiment-pas/2667/4 "2016-02-20T12:30:57Z")

</div>

Tu peux aussi regarder avec une requete dans ce genre la

[code](  
SELECT \*  
FROM `table1`  
WHERE 1  
ORDER BY table1.champ1 DESC  
LIMIT 2  
)  
UNION (

SELECT \*  
FROM `table2`  
WHERE 1  
ORDER BY table2.champ1 DESC  
LIMIT 2  
)  
UNION (

SELECT \*  
FROM `table3`  
WHERE 1  
ORDER BY table3.champ1 DESC  
LIMIT 2  
)[/code]

---

<div class="post-metadata">

**Author:** ![nuitn0ire](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/n/e8c25b/32.png) [@nuitn0ire](https://www.debian-fr.org/u/nuitn0ire)\
**Post date:** [Février 20, 2016, 12:30 UTC](https://www.debian-fr.org/t/probleme-jointures-et-sql-jy-arrive-vraiment-pas/2667/5 "2016-02-20T12:30:57Z")

</div>

Merci à vous, je vais essayer ça 🙂

---

<div class="post-metadata">

**Author:** ![BobX](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/8e8cbc/32.png) [@BobX](https://www.debian-fr.org/u/BobX)\
**Post date:** [Février 20, 2016, 12:30 UTC](https://www.debian-fr.org/t/probleme-jointures-et-sql-jy-arrive-vraiment-pas/2667/6 "2016-02-20T12:30:58Z")

</div>

Il est où le probème de jointure là ❓

---

<div class="post-metadata">

**Author:** ![nuitn0ire](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/n/e8c25b/32.png) [@nuitn0ire](https://www.debian-fr.org/u/nuitn0ire)\
**Post date:** [Février 20, 2016, 12:31 UTC](https://www.debian-fr.org/t/probleme-jointures-et-sql-jy-arrive-vraiment-pas/2667/7 "2016-02-20T12:31:17Z")

</div>

Sachant que j’ai ces tables :

liens\_groupes\_tbl comprennant id et lien  
liens\_labels\_tbl comprennant id et lien  
liens\_divers\_tbl comprennant id et lien

Je veux sortir les 3 derniers liens ajouté dans tout ça. J’entends par là que je ne veux pas les 3 derniers liens de chaque table, mais bien les 3 derniers liens globaux. Donc en fait si J’ai deux id identiques de 3 et un id de 2, ça me sortira les liens des deux ID à 3 et le lien dont l’id est à 2.

Ma requête déconne :

```auto

```

le message est :

[quote]Erreur SQL !  
Column ‘id’ in order clause is ambiguous[/quote]

A savoir que dans mes 3 tables, j’ai des valeurs id qui sont fatalement identiques (auto incrémentation). Est-ce que ça pourrait venir de là ? Si oui comment réécrire le requete correctement ?

merci

---

<div class="post-metadata">

**Author:** ![BobX](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/8e8cbc/32.png) [@BobX](https://www.debian-fr.org/u/BobX)\
**Post date:** [Février 20, 2016, 12:31 UTC](https://www.debian-fr.org/t/probleme-jointures-et-sql-jy-arrive-vraiment-pas/2667/8 "2016-02-20T12:31:18Z")

</div>

Le message d’erreur vient du fait que la colonne id existe dans les trois tables, donc il ne sait pas laquelle il doit sélectionner. Pour résoudre le probléme, il faut soit préfixer le champ id avec le nom de la table dans laquelle tu veux aller le chercher, soit mettre une seule table dans la clause FROM.

---

<div class="post-metadata">

**Author:** ![burinho](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/df705f/32.png) [@burinho](https://www.debian-fr.org/u/burinho)\
**Post date:** [Février 20, 2016, 12:51 UTC](https://www.debian-fr.org/t/probleme-jointures-et-sql-jy-arrive-vraiment-pas/2667/9 "2016-02-20T12:51:58Z")

</div>

sinon il me semble que l’on peux faire cela avec un deuxieme select

SELECT champ1  
FROM table1  
WHERE table1.champ1 IN (SELECT DISTINCT chmps2  
FROM table2  
WHERE …  
ORDER BY 1;

---

<div class="post-metadata">

**Author:** ![ed](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ed/32/5886_2.png) [@ed](https://www.debian-fr.org/u/ed)\
**Post date:** [Février 20, 2016, 12:51 UTC](https://www.debian-fr.org/t/probleme-jointures-et-sql-jy-arrive-vraiment-pas/2667/10 "2016-02-20T12:51:58Z")

</div>

[quote=“burinho”]sinon il me semble que l’on peux faire cela avec un deuxieme select

SELECT champ1  
FROM table1  
WHERE table1.champ1 IN (SELECT DISTINCT chmps2  
FROM table2  
WHERE …  
ORDER BY 1;[/quote]

Attention attention, il faut faire excessivement attention a ce genre de requetes, c’est exctrèmement méchant comme approche!

---

<div class="post-metadata">

**Author:** ![burinho](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/df705f/32.png) [@burinho](https://www.debian-fr.org/u/burinho)\
**Post date:** [Février 20, 2016, 12:51 UTC](https://www.debian-fr.org/t/probleme-jointures-et-sql-jy-arrive-vraiment-pas/2667/11 "2016-02-20T12:51:58Z")

</div>

c’est un peu hard mais ça marche bien si les 2 table ne sont lie directement, de toute façon en sql il plusieur manière de faire

exemple plus simple

SELECT champ1delatable1, champsdelatable2,champsdelatable3  
FROM table1 NATURAL JOIN table2 NATURAL JOIN table3  
ORDER by1;

---

<div class="post-metadata">

**Author:** ![burinho](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/df705f/32.png) [@burinho](https://www.debian-fr.org/u/burinho)\
**Post date:** [Février 20, 2016, 12:52 UTC](https://www.debian-fr.org/t/probleme-jointures-et-sql-jy-arrive-vraiment-pas/2667/12 "2016-02-20T12:52:02Z")

</div>

> [@](#):
>
> Attention attention, il faut faire excessivement attention a ce genre de requetes, c’est exctrèmement méchant comme approche!

tiens après réflexion, je comprend pas pourquoi c’est mechanr cela a l’air impressionnant mais pratqiue pour lié de table qui n’ont pas en commun de PK et FK., moi je trouve que cela evite de faire un where avec plein de AND.
