requete entre plusieurs tables (MySQL)

requete entre plusieurs tables (MySQL) - SQL/NoSQL - Programmation

Marsh Posté le 09-06-2004 à 21:00:49    

Salut, j'ai deux tables :
 
rubriques
rub_id
rub_name
 
et
 
articles
art_id
art_rub_id
art_titre
 
il y a pleins d'articles, un article est rattaché à une seule rubrique via art_rub_id
 
je veux en une requete recuperer le nom d'une rubrique ainsi que le titre du dernier article ( = le titre de l'article dont art_id = max(art_id) )
 
j'ai fait ca :
 
SELECT rub_name, max(art_id) as rub_last  
FROM articles, rubriques  
WHERE rub_id = art_rub_id  
GROUP BY 1  
ORDER BY rub_order
 
ca me sort le titre d'une rubrique et l'id du dernier article. donc c pas exactement ske je veut
 
j'ai essayé ca mais ca marche pas (ca sort pas le dernier titre)
 
SELECT rub_name, art_titre AS rub_last
FROM articles, rubriques
WHERE rub_id = art_rub_id  
GROUP BY rub_name, rub_id, art_rub_id
ORDER BY rub_order
 
 
help   :cry:
 
 
ce que je cherche c'est un truc comme ca :
 
rubrique 1 -> titre du dernier article de la rubrique 1
rubrique 2 -> titre du dernier article de la rubrique 2
rubrique 3 -> titre du dernier article de la rubrique 3
...


Message édité par C@ssius le 09-06-2004 à 22:12:20

---------------
Le Tournoi : Résultats, Classements, Discussions . feed Rss IMDB
Reply

Marsh Posté le 09-06-2004 à 21:00:49   

Reply

Marsh Posté le 09-06-2004 à 21:41:42    

Reply

Marsh Posté le 09-06-2004 à 22:53:42    

le plus simple est probablement de faire une table temporaire contenant les plus grands art_id pour chaque rubrique.
 
INSERT INTO last_articles
SELECT rub_name, max(art_id) as rub_last  
FROM articles, rubriques  
WHERE rub_id = art_rub_id  
GROUP BY rub_name;
 
Ensuite tu fais la jointure entre cette table temporaire et la table des articles pour récupérer les titres associés ;)

Reply

Marsh Posté le 10-06-2004 à 01:10:15    

ca fait pl requetes ca :/


---------------
Le Tournoi : Résultats, Classements, Discussions . feed Rss IMDB
Reply

Marsh Posté le 11-06-2004 à 19:19:07    

Autant pour moi, j'ai dit des conneries:

Code :
  1. SELECT rub_id, rub_name, art_rub_id, MAX(art_id), art_name
  2. FROM test_articles, test_rubriques
  3. WHERE art_rub_id = rub_id
  4. GROUP BY art_rub_id


ne marche effectivement PAS.
 
Je réitère avant l'édition donc :
Il faut utiliser un LEFT JOIN ou un sub-select.


Message édité par BSRobin le 11-06-2004 à 19:52:19
Reply

Marsh Posté le 11-06-2004 à 21:02:31    

Oui, donc, c'est réalisable avec une sub-query (je n'ai pas une version de MySQL récente d'installée).
La condition de la sous-requête étant :
SELECT ...
FROM ...
WHERE art_id in (SELECT MAX(arttmp.art_id) FROM articles arttmp GROUP BY art_rub_id)
 
Dans le meilleur des mondes, MySQL supporterait depuis des années les vues, et tu en aurais créé une pour obtenir le dernier article pour chaque rubrique (en remplacement de la sous-requête).
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed