Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/06/2006, 13h30   #1
Membre éclairé
 
Avatar de hisy
 
Inscription : novembre 2004
Messages : 373
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 373
Points : 300
Points : 300
Par défaut Requete (trop ) compliquée ( pour moi )

Bonjour

J'ai essayé mais je n'y arrive pas ...
Je précise que je suis obligé de travailler en Mysql 3.14. donc pas de ss-rq !

Voila le topo.

J'ai une table suggestions :

sug_id
sug_desc
sug_date
...

Une table estimations liée :

est_id
est_sug_id ( ma clé étrangère provenenant de suggestions)
est_date
...

Et pour finir une table notes liée :

not_id
not_sug_id ( ma clé étrangère provenenant de suggestions)
note_date

est_date est la date ou la suggestion est émise.
Quand une estimation est attachée à une suggestion, je crée un ligne dans estimation avec la date du jour.

Ce qui implique que si aucune estimation n'a été réalisée pour une idée, elle ne se trouve pas dans cette table ...

Idem pour note.

L'idée est de remonter les 10 suggestions oubliées càd celle pour lesquelles la date la plus récente en base ( parmi sug_date, est_date , not_date ) est la plus ancienne.

Si vous avez lu jusqu'ici , merci déjà pour votre patience .
__________________
Take it HiSy
hisy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2006, 14h26   #2
Membre actif
 
Avatar de jak0
 
Inscription : mai 2005
Messages : 272
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 272
Points : 176
Points : 176
Citation:
Envoyé par hisy
la date la plus récente en base [...] est la plus ancienne
Moi pas comprendre lol
__________________
Goah Sha Kree
jak0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2006, 14h34   #3
Membre éclairé
 
Avatar de hisy
 
Inscription : novembre 2004
Messages : 373
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 373
Points : 300
Points : 300
He ben en fait pour chaque ecriture j'ai une nouvelle date .
Je peux donc avoir 3 dates pour une suggestion donnée.

Je veux les 10 suggestions pour lesquelle la plus récente de ces 3 date est la plus ancienne ...

En gros ... Si j'ai une suggestion avec comme dates :

2004-06-01 // 2005-01-01 // 2006-01-01

Je veux qu'elle soit considérée comme plus ancienne qu'une avec des dates :

2004-05-12 // 2006-06-14 // 2006-01-01

Parce que sa date la plus récente est plus ancienne que la date la plus récente de la 2eme suggestion ...



JE me noie ... SOS
__________________
Take it HiSy
hisy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2006, 15h53   #4
Membre Expert
 
Avatar de Sivrît
 
Inscription : février 2006
Messages : 953
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2006
Messages : 953
Points : 1 189
Points : 1 189
Code :
1
2
3
4
5
6
 
SELECT sug_id, GREATEST(sug_date, est_date, note_date) AS max_date
FROM sug LEFT JOIN est ON (sug_id=est_sug_id)
         LEFT JOIN NOT ON (sug_id=not_sug_id)
ORDER BY max_date ASC
LIMIT 10
Je n'ai pas lancé cette requète donc attention aux fautes de frappes. Je 'pense' que ça passe sur MySQL 3.

Je suis parti sur des liaisons 1-1. Si les estimations et autres peuvent être multiples il faudra ajouter un 'GROUP BY sug_id' et utiliser 'MIN(est_date)' plutôt que est_date (idem note). Mais ça fait un produit cartésien entre estimations et notes... Ca marche quand même mais c'est pas terrible, seulement sans procédures imbriquées je ne vois pas de contournement.

Il y a aussi un problème avec l'absence d'estimation (ou de note) qui donne est_date nulle et GREATEST renvoie alors NULL (comme beaucoup de fonctions MySQL). Ca peut se contourner en utilisant IFNULL sur est_date et une date par défaut qui remonte à avant le déluge.
Sivrît est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 08h14   #5
Membre éclairé
 
Avatar de hisy
 
Inscription : novembre 2004
Messages : 373
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 373
Points : 300
Points : 300
Bonjour

ma version de mySQL ne connait pas le GREATEST ... ( et moi non plus a vrai dire )

...

__________________
Take it HiSy
hisy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 11h01   #6
Membre Expert
 
Avatar de Sivrît
 
Inscription : février 2006
Messages : 953
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2006
Messages : 953
Points : 1 189
Points : 1 189
Ca va devenir compliqué... Passer à une version plus récente, c'est jouable ?

La doc donne :
Citation:
Before MySQL 3.22.5, you can use MAX() instead of GREATEST().
Donc après la 3.22.5 ça devrait être bon. Si ta version est antérieure, est-ce que MAX aurait le même comportement ?

Autre possibilité, imbriquer plusieurs IF pour coder un maximum sur trois éléments. Moche mais efficace.
Sivrît est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 13h16   #7
Membre éclairé
 
Avatar de hisy
 
Inscription : novembre 2004
Messages : 373
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 373
Points : 300
Points : 300
Ben en fait ... le GREATEST() passe ...

Je suis allé un peu vite pour répondre ...

Merci bcp
__________________
Take it HiSy
hisy est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h58.


 
 
 
 
Partenaires

Hébergement Web