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

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 :\

Houlala, il va falloir que j’exhume mes cours :wink:

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.

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]

Merci à vous, je vais essayer ça :slightly_smiling:

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

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 :

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

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.

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=“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!

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;

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.