lombredudragon
Messages : 982 Inscrit le 26/02/03
Non connecté
|
|
Posté le 03 mai 2006 - 14 h 19 m 44 s |
|
|
Salut all voila je boss sous phpmyadmin et j'ai besoin d'effectuer une requetes qui recupere des infos selon plusieurs criteres de recherche :
$query="SELECT DISTINCT sql_host,sql_login,sql_password
FROM prestations
WHERE type='serveur_dedie'
AND login='siteweb'
AND id_client='24'
AND plus_recente(date_debut)";
donc le critere le plus important c'est la date_debut qui doit etre la plus recente possible dans la base.
plus_recente() n'existe pas c'est juste pour montrer ce que j'aimerais faire.
Comment recuperer la date la plus recente dans un champ d'une table ?
la date est au format sql suivant : 2006-05-03
voila
|
|
| |
|
lombredudragon
Messages : 982 Inscrit le 26/02/03
Non connecté
|
|
Posté le 03 mai 2006 - 15 h 26 m 40 s |
|
|
ndlr : pour l'instant j'utilise ORDER BY date_debut DESC
|
|
| |
|
bernie38
Waldorf (le pote à Statler)
Messages : 11 419 Inscrit le 28/08/03
Ville : Claix
Non connecté
|
|
Posté le 03 mai 2006 - 16 h 34 m 17 s |
|
|
si j'ai bien compris la question :
SELECT MAX(DATE_DEBUT) FROM ... WHERE ...
|
|
| |
La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire
|
Woofy
Pour les bons tuyaux me demander
Messages : 26 210 Inscrit le 11/01/02
Ville : Paris / Grenoble
Non connecté
|
|
Posté le 03 mai 2006 - 17 h 48 m 29 s |
|
|
Bah garde l'ORDER BY date_debut DESC, et met un LIMIT 1.
Sinon, tu peux peut-être utiliser MIN() et MAX() non ? Je sais pas trop là.
EDIT : j'avais pas lu le post de Bernie
|
|
| |
Message édité 2 fois, la dernière par Woofy le 03 mai 2006 - 17 h 49. |
| |
Totalement inutile, donc completement indispensable 
|
bernie38
Waldorf (le pote à Statler)
Messages : 11 419 Inscrit le 28/08/03
Ville : Claix
Non connecté
|
|
Posté le 03 mai 2006 - 17 h 51 m 49 s |
|
|
je suis pas sûr qu'utiliser un order by et un limit à 1 ne soit pas plus gourmand en ressource que faire un max. Encore que, selon le sgbd et sa version, ça pourrait bien revenir au même (table scan)
|
|
| |
La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire
|
Woofy
Pour les bons tuyaux me demander
Messages : 26 210 Inscrit le 11/01/02
Ville : Paris / Grenoble
Non connecté
|
|
Posté le 03 mai 2006 - 17 h 53 m 30 s |
|
|
En même temps, ca dépend de la taille de ses tables.
Mettre un Limit ne limite pas la requete au nombre de résultats souhaités. Le moteur fait la requete sur toute la table et ne retourne que les champs qu'on veut.
Donc bon, s'il n'a que 10 users c'est pas grave, s'il en a 10 000...
|
|
| |
Totalement inutile, donc completement indispensable 
|
bernie38
Waldorf (le pote à Statler)
Messages : 11 419 Inscrit le 28/08/03
Ville : Claix
Non connecté
|
|
Posté le 03 mai 2006 - 17 h 56 m 44 s |
|
|
ou si la table a 50 millions de lignes... D'autant plus qu'indexer une colonne sur une date, hein...
|
|
| |
La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire
|
Woofy
Pour les bons tuyaux me demander
Messages : 26 210 Inscrit le 11/01/02
Ville : Paris / Grenoble
Non connecté
|
|
Posté le 03 mai 2006 - 18 h 05 m 51 s |
|
|
En fait, si j'ai bien compris, il veut récupérer toutes les colonnes de l'enregistrement dont la date est la plus récente.
Un truc genre
SELECT DISTINCT sql_host,sql_login,sql_password
FROM prestations
WHERE type='serveur_dedie'
AND login='siteweb'
AND id_client='24'
HAVING date_debut = (SELECT MAX(date_debut) FROM prestation)
J'ai pas testé, mais c'est du genre je pense.
EDIT : bon j'ai testé, pour moi ca marche.
|
|
| |
Message édité 1 fois, la dernière par Woofy le 03 mai 2006 - 18 h 07. |
| |
Totalement inutile, donc completement indispensable 
|
bernie38
Waldorf (le pote à Statler)
Messages : 11 419 Inscrit le 28/08/03
Ville : Claix
Non connecté
|
|
Posté le 03 mai 2006 - 18 h 09 m 41 s |
|
|
pourquoi having et pas and ? D'autant plus que having sans group by, pas sur que ça marche, si ? Ou alors c'est un dérivé lointain de SQL ANSI
|
|
| |
La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire
|
Woofy
Pour les bons tuyaux me demander
Messages : 26 210 Inscrit le 11/01/02
Ville : Paris / Grenoble
Non connecté
|
|
Posté le 03 mai 2006 - 18 h 12 m 13 s |
|
|
Pourquoi HAVING ?
Parcque je trouve ca plus joli qu'un WHERE 
Non en fait j'en sais rien, c'est vrai que je viens de regarder, ca marche aussi avec le WHERE, mais j'y croyais pas avant.
|
|
| |
Totalement inutile, donc completement indispensable 
|
bernie38
Waldorf (le pote à Statler)
Messages : 11 419 Inscrit le 28/08/03
Ville : Claix
Non connecté
|
|
Posté le 03 mai 2006 - 18 h 14 m 12 s |
|
|
comment tu n'y croyais pas ? c'est du sql tout à fait standard. Et plus naturel avec un WHERE, non ? Le HAVING étant associé au GROUP BY
|
|
| |
La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire
|
Woofy
Pour les bons tuyaux me demander
Messages : 26 210 Inscrit le 11/01/02
Ville : Paris / Grenoble
Non connecté
|
|
Posté le 03 mai 2006 - 18 h 15 m 40 s |
|
|
| La clause HAVING peut faire référence à n'importe quel champs ou alias défini dans select_expr. C'est évalué en dernier lieu, juste avant que les éléments ne soient envoyés au client, sans aucune optimisation. |
Bon bah mieux vaut le WHERE.
En fait, je tatonne un peu quand on rentre dans les requêtes imbriquées et compagnie.
|
|
| |
Totalement inutile, donc completement indispensable 
|
bernie38
Waldorf (le pote à Statler)
Messages : 11 419 Inscrit le 28/08/03
Ville : Claix
Non connecté
|
|
Posté le 03 mai 2006 - 19 h 48 m 00 s |
|
|
ah oui, l'ensembliste, au début c'est pas naturel. Mais après, ça vient tout seul. Suffit de s'acharner. Un peu comme les regexp, quoi, si tu vois ce que je veux dire
|
|
| |
Message édité 1 fois, la dernière par bernie38 le 03 mai 2006 - 19 h 48. |
| |
La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire
|
lombredudragon
Messages : 982 Inscrit le 26/02/03
Non connecté
|
|
Posté le 03 mai 2006 - 20 h 52 m 36 s |
|
|
l'idee du max etait bien mais je peut pas utiliser des requetes imbriqués car sur le serveur de production finale c'est une veille version de phpmyadmin alors qu'en local ca marche vu que c'est la derneire version . aller comprendre pourquoi
je crois que je vais rester sur l'idee du order by ^^ avec un limit 1
EDIT: j'ai rien dis lol on peut faire deux requetes une pour stocker le resultatdu select max(. mais bon vais voir en tout cas merci bien , y'aura une tite ligne dans mon rapport : remerciement à bernie38 woofy ... pour leur aide precieuse sur les regexp et certaines requetes sql
@ plouche
|
|
| |
Message édité 1 fois, la dernière par lombredudragon le 03 mai 2006 - 20 h 54. |
| |
|
bernie38
Waldorf (le pote à Statler)
Messages : 11 419 Inscrit le 28/08/03
Ville : Claix
Non connecté
|
|
Posté le 04 mai 2006 - 13 h 13 m 32 s |
|
|
de rien.
Et pour les regexp encore moins  parce que j'arrive pas à m'y intéresser. C'est pas humain, ce truc
|
|
| |
La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire
|
grabber
Coordinateur
MacBook Pro 2,4 Powered
Messages : 8 556 Inscrit le 06/03/02
Ville : Angers
Non connecté
|
|
Posté le 04 mai 2006 - 15 h 20 m 13 s |
|
|
c'est pas le serveur qui te bloque, ni la version de phpmyadmin, mais la version de ton mysql qui ne gere pas les sous requetes
|
|
| |
|
bernie38
Waldorf (le pote à Statler)
Messages : 11 419 Inscrit le 28/08/03
Ville : Claix
Non connecté
|
|
Posté le 04 mai 2006 - 18 h 40 m 40 s |
|
|
cette version n'est même pas SQL ANSI alors ???
|
|
| |
La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire
|
Woofy
Pour les bons tuyaux me demander
Messages : 26 210 Inscrit le 11/01/02
Ville : Paris / Grenoble
Non connecté
|
|
|
| |
Totalement inutile, donc completement indispensable 
|