SQL - max() et retour de ligne - SQL/NoSQL - Programmation
Marsh Posté le 30-11-2002 à 00:39:12
elle ressemble a koi ta requete?
Marsh Posté le 30-11-2002 à 00:41:08
Faut ruser.
Au lieu de chercher le max de la colonne, trie la par ordre décroissant et ne garde que la première ligne
Marsh Posté le 30-11-2002 à 00:46:39
mrbebert a écrit a écrit : Faut ruser. Au lieu de chercher le max de la colonne, trie la par ordre décroissant et ne garde que la première ligne |
Marsh Posté le 30-11-2002 à 00:48:40
OUAH merci de répondre! VOila ma requete :
select num_users, nom_users, pws_users from users_site where num_users = (SELECT MAX(num_users) from users_site);
Pourquoi ca passerait pas?
Si je pars dans une autre optique et que je trie en decroissant ,cOmment tu fais pour ne garder que la premiere ligne sous mysql?
CHaiCA
Marsh Posté le 30-11-2002 à 00:52:52
peut etre supporte t il mal les requetes imbrikées, essai de passer par une variable tampon et de les dissociées.
concernant la recuperation juste de la premiere: si tu lis avec un while, vire le while et fait kune lecture a la premiere ligne du tableau.
cependant je te deconseille cette methode meme si elle parait seduisante de loin: meme si tu lis ke la premiere ligne, tu charges tout la tables en memoire, ce ki n'est pas forcement une bonne idée..
ressai ta methode en passant par une variable tampon
Marsh Posté le 30-11-2002 à 00:56:42
Leirn : ouais je vais essayer ca mais je suis un peu decu si mysql gere si mal les requetes imbriquees, m'enfin c'est gratuit, on peut pas tout avoir.
Toutefois pour recuperer la premiere ligne tu peux normalement faire ca dans la requete meme par exemple sous sqlserver, c'est top 1 apres avoir trier en decroissant.
Bon pour l'instant je vais essayer le tampon on verra bien
Mais si quelqu'un a une autre soluce je reste preneur!
CHaiCA
Marsh Posté le 30-11-2002 à 01:05:29
chaica a écrit a écrit : OUAH merci de répondre! VOila ma requete : select num_users, nom_users, pws_users from users_site where num_users = (SELECT MAX(num_users) from users_site); Pourquoi ca passerait pas? Si je pars dans une autre optique et que je trie en decroissant ,cOmment tu fais pour ne garder que la premiere ligne sous mysql? CHaiCA |
Je ne crois pas que mysql gère les requêtes imbriquées
Pour garder la dernière ligne, tu rajoutes "LIMIT 0, 1" à ta requête (0 car tu prends la première ligne (numérotées à partir de 0), et 1 pour le nombre de lignes que tu veux récupérer).
Marsh Posté le 30-11-2002 à 01:12:43
chaica a écrit a écrit : Leirn : ouais je vais essayer ca mais je suis un peu decu si mysql gere si mal les requetes imbriquees, m'enfin c'est gratuit, on peut pas tout avoir. Toutefois pour recuperer la premiere ligne tu peux normalement faire ca dans la requete meme par exemple sous sqlserver, c'est top 1 apres avoir trier en decroissant. Bon pour l'instant je vais essayer le tampon on verra bien Mais si quelqu'un a une autre soluce je reste preneur! CHaiCA |
effectivement si tu peux limiter le nombre de lignes renvoeyer a 1 (ce ki est posisble maintenant ke tu le dis, j'y avais pas penser tout a l'heure, le tri c ce kil y a de plus mieux
en revanche, c absolument normal kil gere pas les requetes imbrikés... contrairmeent a du c ou tu peut avoir kke cose de la forme
for (i=0; i<foncitonkirecuepereunchiffre(); i++)
le sql foncitnone sous forme de requete et non pas d'appel de fonction
Marsh Posté le 30-11-2002 à 01:14:04
Leirn : heu... oracle les gere parfaitement (tested and approved everyday)
CHaiCA
Marsh Posté le 30-11-2002 à 01:16:22
chaica a écrit a écrit : Leirn : heu... oracle les gere parfaitement (tested and approved everyday) CHaiCA |
je ne sais pas comment fonctionne oracle jamais essayé
Marsh Posté le 06-12-2002 à 19:02:15
mysql gere les subqueries uniquement a partir de la version 4.1 qui est en cours de developpement
Marsh Posté le 06-12-2002 à 19:06:02
Ex :
mysql> SELECT titre,numeropost,date,auteur FROM forumconthardwarefr7 WHERE numeropost=(SELECT max(numeropost) FROM forumconthardwarefr7); |
Marsh Posté le 06-12-2002 à 19:08:05
joce a écrit : mysql gere les subqueries uniquement a partir de la version 4.1 qui est en cours de developpement |
les subqueries c les requetes imbriqué?
Marsh Posté le 06-12-2002 à 19:08:32
ReplyMarsh Posté le 06-12-2002 à 19:09:31
Et t'as aussi les derived table :
SELECT * FROM (SELECT truc FROM pouet WHERE schmeu) WHERE gloups=hummf;
Marsh Posté le 06-12-2002 à 19:10:22
et elle sort bientot la v 4.1 ? et pourkoi ils ont pas fait ca avant?
Marsh Posté le 06-12-2002 à 19:13:15
forummp3 a écrit : et elle sort bientot la v 4.1 ? et pourkoi ils ont pas fait ca avant? |
parce que c'est pas trivial a faire
Marsh Posté le 06-12-2002 à 19:14:22
joce a écrit : |
ha ok
sinon on fait comment pour remplacer cela car ca a l'air tres utile
Marsh Posté le 06-12-2002 à 19:26:39
ReplyMarsh Posté le 27-05-2003 à 23:09:36
joce a écrit : Ex :
|
Elle n'est pas conçue bizarrement ta DB ?
Le stockage du pseudo de l'auteur en lieu et place de son ID n'est pas commum. Ca fait perdre de la place et c'est peut être pas le mieux niveau relationnel si ? Tu es vraiment gagnant avec la jointure que ca te fait économiser ?
Autre point curieux : on dirait que tu créés une table par forum (table forumconthardwarefr7 pour le forum Blabla - Divers qui porte le n°7). Tu as constaté un gain de performance significatif en procédant ainsi plutôt qu'en créant une table commune avec un champ indexé forum_id ? Ca semble assez déroutant comme organisation
Marsh Posté le 27-05-2003 à 23:21:35
il supporte les jointures entre la requête principale et la requête imbriquée ?
Par exemple, pour récupérer le dernier post de chaque membre :
Code :
|
Si oui, alors mySQL va peut-être enfin devenir intéressant...
Marsh Posté le 27-05-2003 à 23:23:23
Core 666 a écrit : |
Il utilise le login comme clé.
C'est pas plus lent, ça bouffe pas beaucoup plus de place, et ça évite de faire des jointures sans arrêt pour retrouver le pseudo de l'auteur.
Marsh Posté le 27-05-2003 à 23:30:44
Et, dernière question, supporte-t-il les requêtes dans le select ?
Code :
|
Marsh Posté le 29-05-2003 à 01:59:11
réponse : oui
D'ailleurs t'es pas obligé de rajouter FROM DUAL
Marsh Posté le 30-11-2002 à 00:19:04
Salut j'ai une colonne num_client où chaque client a un numero.
Je veux trouver le client qui a le plus grand numero et retourner ses autres attributs (par ex nom, prenom)
Avec max je trouve le num le plus grand mais impossible de retourner le reste de la ligne!
Si qqn peut m'aider
CHaiCA