Rechercher : dans
Par :

MySQL sous requete

Dernière réponse le 10 nov 2009 à 09:33:25 koala., le 9 nov 2009 à 10:00:12 
 Signaler ce message aux modérateurs

Bonjour,

J'ai trois table dans une requête mais deux me pose problème

t1
id
1 - -
2 - -
3 - -

t2
id
1 12/05/2008
1 05/06/2007
1 12/11/2009
2 04/12/2008
2 06/11/2006

Je voudrai que la requête retourne pour chaque id la date la plus récente :
1 12/11/2009
2 04/12/2008

Merci de votre aide.

Meilleures réponses pour « MySQL sous requete » dans :
MySQL – Optimisation VoirL’optimisation au niveau de MySQL passe par trois composants, à savoir : Optimisation du serveur MySQL Optimisation de la base de données Optimisation des requêtes Optimisation de la configuration de serveur MySQL L’optimisation du serveur peut...
PHP - Bases de données VoirPhp permet un interfaçage très simple avec un grand nombre de bases de données. Lorsqu'une base de données n'est pas directement supportée par Php, il est possible d'utiliser un driver ODBC, pilote standard pour communiquer avec les bases de...

1

koala., le 9 nov 2009 à 10:37:12

Voilà, ce que j'ai fait mais qui ne fonctionne pas :

SELECT *
FROM t3
LEFT JOIN t1 (t1.champ_quelconque = t2.champ_quelconque AND t1.champ_quelconque_autre=3 AND t1.champ_quelconque_autre=6)
WHERE t1.id=(
SELECT id,champ, MAX(date)
FROM `t2`
WHERE t2.id= D.id)

Répondre à koala.

2

Christounet, le 9 nov 2009 à 11:53:02

Bonjour,

Le code suivant devrait te donner le résultat recherché pour les deux tables t1 et t2

SELECT distinct id from t1 ,
(select max(date) from t2 where t2.id = t1.id)

Il ne te reste plus qu'a faire la jointure avec t3.
Juste encore deux petites remarques dans ton code
- la jointure entre t3 et t1 devrait être du genre t3.champ_quelconque = t1.champ_quelconque et non t2
- comment le t1.champ_quelconque_autre peut-il être égal à 3 et à 6 en même temps, tu veux peut-être sélectionné les enregistrements ayant ce champ égal à 3 OU à 6, alors remplace ton AND par OR.
A plus On se donne des souvenirs quand on se quitte.
(Marcel Achard)

Répondre à Christounet

3

koala., le 9 nov 2009 à 13:34:29

Finalement, j'avais trouvé
SELECT *
FROM t3
LEFT JOIN t1 (t1.champ_quelconque = t2.champ_quelconque AND t1.champ_quelconque_autre=3 AND t1.champ_quelconque_autre=6)
LEFT JOIN t2 (t1.champ_quelconque = t2.champ_quelconque)
WHERE t1.id=(MAX(date)
FROM `t2`
WHERE t2.id= D.id)
maintenant nom souci c'est que j'ai des ligne nul avec ma requête simple et je voudrai quelles apparaissent aussi avec la sous-requête

Répondre à koala.

4

Christounet, le 9 nov 2009 à 17:12:28

Bonjour koala,

Je ne comprends pas ton ordre sql, tu ne sélectionnes que des données de t3 , aucune de t1 ou t2. Peut-tu m'indiquer les colonnes de t3, quelques exemples de données de t3 et le résultat que tu souhaites obtenir, cela sera alors peut-être un peu plus clair pour moi.

A plus On se donne des souvenirs quand on se quitte.
(Marcel Achard)

Répondre à Christounet

5

 koala., le 10 nov 2009 à 09:33:25

Finalement, j'avais réussi à faire ce que je voulais :

SELECT DISTINCT (t1.ID), t1.champ1 , t3.ID, t3.champ2 , t2.DATE, t2.champ3
FROM `t3`
LEFT JOIN t1 ON ( t1.IDr = t3.IDr
AND t1.ID =6
AND t1.ID2=5 )
LEFT JOIN t2 ON (t3.id4 = t2.id4 AND
t2.DATE = (SELECT MAX( DATE ) FROM t2 WHEREt3.id4 = t2.id4 ))

Répondre à koala.
Collection CommentÇaMarche.net