[résolu] jointure et 'distinct'
15 messages • Page 1 sur 1
[résolu] jointure et 'distinct'
Bonjour à tous,
J'ai un petit problème avec une requête qui doit me retourner les fiches qui ont été commentées en dernier.
La requete fonctionne bien sauf que si une fiche a reçu plusieurs commentaires récemment, elle resortira plusieurs fois dans ma liste, ce que je ne souhaite pas.
J'ai essayé d'utiliser DISTINCT et GROUP BY mais les résultats ne sont pas ceux attendus, une bonne âme pourra-t-elle m'aider ?
J'avoue que je suis à cours d'idée là
J'ai un petit problème avec une requête qui doit me retourner les fiches qui ont été commentées en dernier.
La requete fonctionne bien sauf que si une fiche a reçu plusieurs commentaires récemment, elle resortira plusieurs fois dans ma liste, ce que je ne souhaite pas.
- Code: Tout sélectionner
SELECT Fiche.*, Comment.created_at AS last_comment_created_at
FROM dkannu_fiches Fiche
JOIN dkannu_comments Comment ON Fiche.id=Comment.fiche_id AND Comment.online=1
WHERE Fiche.online='1'
ORDER BY Comment.created_at DESC
LIMIT 20
J'ai essayé d'utiliser DISTINCT et GROUP BY mais les résultats ne sont pas ceux attendus, une bonne âme pourra-t-elle m'aider ?
J'avoue que je suis à cours d'idée là
Dernière édition par seebz le Mer Jan 07, 2009 10:12, édité 1 fois.
Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics
Merci à tous les 2 d'avoir répondus
Pouvez-vous (si possible) me donner un exemple de requete car je ne vois pas comment faire avec la sous-requete.
J'ai aussi essayé le GROUP BY mais ca ne prenait pas forcément le dernier commentaire d'une fiche (j'ai probablement du mal m'y prendre)
Pouvez-vous (si possible) me donner un exemple de requete car je ne vois pas comment faire avec la sous-requete.
J'ai aussi essayé le GROUP BY mais ca ne prenait pas forcément le dernier commentaire d'une fiche (j'ai probablement du mal m'y prendre)
Salut, voila 2 requêtes. Je me suis construit une tite table fiche et commentaire et voila ce qui en ressort:
ou encore, une plus farfelue moins consommatrice de mémoire mais surement plus lente:
- Code: Tout sélectionner
select fiche.id as idfiche, comment.date, comment.id as idcomm
from comment inner join fiche on (comment.id_fiche = fiche.id)
group by comment.id_fiche
order by comment.date DESC
ou encore, une plus farfelue moins consommatrice de mémoire mais surement plus lente:
- Code: Tout sélectionner
select id as idcomm,date,(select id from fiche where id = (select id_fiche from comment where id = idcomm)) as idfiche
from comment
group by id_fiche
order by date DESC
Génial, je vais tester ça demain à la première heure, certainement la première requete car comme je suis en mutualisé je me tamponne de la consommation mémoire (joke
)
Si ca marche, je te remercierai 1000 fois (et bool/lupuz aussi bien entendu) , sinon je me mettrai à la broderie
Si ca marche, je te remercierai 1000 fois (et bool/lupuz aussi bien entendu) , sinon je me mettrai à la broderie
Bool a écrit:sans un max() pour récupérer la date la plus récente, tu vas surtout avoir des résultats aléatoires
Arf, des résultats aléatoire, j'en ai eu pas mal en testant diverses requetes
Que recommandes-tu ? ou placerais-tu le MAX() ?
Encore merci de m'aider
Re: [sql] jointure et 'distinct'
seebz a écrit:Bonjour à tous,
J'ai un petit problème avec une requête qui doit me retourner les fiches qui ont été commentées en dernier.
La requete fonctionne bien sauf que si une fiche a reçu plusieurs commentaires récemment, elle resortira plusieurs fois dans ma liste, ce que je ne souhaite pas.
- Code: Tout sélectionner
SELECT Fiche.*, Comment.created_at AS last_comment_created_at
FROM dkannu_fiches Fiche
JOIN dkannu_comments Comment ON Fiche.id=Comment.fiche_id AND Comment.online=1
WHERE Fiche.online='1'
ORDER BY Comment.created_at DESC
LIMIT 20
J'ai essayé d'utiliser DISTINCT et GROUP BY mais les résultats ne sont pas ceux attendus, une bonne âme pourra-t-elle m'aider ?
J'avoue que je suis à cours d'idée là
déjà je pense que la requete à un problème dans la jointure et que le Comment.online=1 doit se trouver apres la première close where :
- Code: Tout sélectionner
SELECT Fiche.*, Comment.created_at AS last_comment_created_at
FROM dkannu_fiches Fiche
JOIN dkannu_comments Comment ON Fiche.id=Comment.fiche_id
WHERE Fiche.online='1' AND Comment.online='1'
ORDER BY Comment.created_at DESC
LIMIT 20
Ensuite je mettrai un group by Fiche.id (ou ref ou num je sais pas quel est l'identifiant de tes fiche) pour éviter les doublons donc un truc final comme ça :
- Code: Tout sélectionner
SELECT Fiche.*, Comment.created_at AS last_comment_created_at
FROM dkannu_fiches Fiche
JOIN dkannu_comments Comment ON Fiche.id=Comment.fiche_id
WHERE Fiche.online='1' AND Comment.online='1'
GROUP BY Fiche.id
ORDER BY Comment.created_at DESC
LIMIT 20
Youps, merci bool, heureusement que tu suis
J'ai été légèrement vite, voila la requête corrigé avec le MAX(date) et pas date
Et les résultats du test, beaucoup plus pertinents :p
Table commentaire
Table Fiche
Résultat de la requête:
- Code: Tout sélectionner
SELECT fiche.id as idfiche,max(date) as last,comment.id as idcom
FROM comment INNER JOIN fiche ON (fiche.id = comment.id_fiche)
GROUP by id_fiche
ORDER BY last DESC
Et les résultats du test, beaucoup plus pertinents :p
Table commentaire
- Code: Tout sélectionner
Textes complets id date id_fiche
Modifier Effacer 1 2009-01-06 23:59:39 1
Modifier Effacer 2 2009-01-06 23:48:02 3
Modifier Effacer 3 2009-01-06 23:48:07 4
Modifier Effacer 4 2009-01-06 23:42:21 2
Modifier Effacer 5 2009-01-06 23:53:21 3
Modifier Effacer 6 2009-01-06 23:48:30 1
Modifier Effacer 7 2009-01-06 23:48:12 2
Table Fiche
- Code: Tout sélectionner
Textes complets id
Modifier Effacer 1
Modifier Effacer 2
Modifier Effacer 3
Modifier Effacer 4
Résultat de la requête:
- Code: Tout sélectionner
idfiche last Décroissant idcom
1 2009-01-06 23:59:39 1
3 2009-01-06 23:53:21 2
2 2009-01-06 23:48:12 4
4 2009-01-06 23:48:07 3
Je vois que certains ont bossés tard sur mon problème et je les remercie
Je viens de tester et le gagnant est [..roulement de tambours..] YoyoS (avec les remarques de Bool et coolspot).
La requete finale est la suivante :
Je suis content que ca fonctionne, ca m'évitera d'apprendre la broderie
Comme promis :
Je viens de tester et le gagnant est [..roulement de tambours..] YoyoS (avec les remarques de Bool et coolspot).
La requete finale est la suivante :
- Code: Tout sélectionner
SELECT Fiche.*, MAX(Comment.created_at) AS last_comment_created_at
FROM dkannu_fiches Fiche
INNER JOIN dkannu_comments Comment
ON Fiche.id=Comment.fiche_id
WHERE Fiche.online='1' AND Comment.online='1'
GROUP BY Comment.fiche_id
ORDER BY last_comment_created_at DESC
LIMIT 20
Je suis content que ca fonctionne, ca m'évitera d'apprendre la broderie
Comme promis :
- Code: Tout sélectionner
$thanks_to = array('YoyoS', 'Bool', 'coolspot', 'lupuz');
for($i=0; $i<1000; $i++)
printf('Merci à %s et longue vie à WRI !<br />', join(', ', $thanks_to));
YoyoS a écrit:T'aurais pu nous faire une page php dédiée qu'on puisse executer avec la boucle des remerciements quand même
Suffit de demander, et ici un 'tit truc rien que pour toi
Modérateurs: WebRankInfo, e-kiwi, OTP, fandecine, Patrice A.
15 messages • Page 1 sur 1
Formation recommandée sur ce thème :
Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- mysql DISTINCT
- Probleme de SELECT DISTINCT
- Multiples DISTINCT dans une requête..possible ?
- DISTINCT ne marche plus, tout d'un coup
- MySql selection sans doublon (select distinct)
- Problème avec clause DISTINCT dans requête SQL
- [SQL] Select, Distinct, Max, Group by et autres fariboles
- jointure
- SQL, Jointure
- jointure mysql
- Problème choix syntaxe jointure
- Jointure sur 2 serveurs Mysql ?
- Une jointure à trois table
- Jointure SQL ne fonctionne pas..
- Vitesse requetes jointure mysql, et Indexes
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité







le forum