2009-09-27 5 views

Répondre

8

Essayez ceci:

SELECT * 
FROM map 
WHERE positionV = (SELECT MAX(positionV) FROM map) 
+0

Wow. Pendant toutes ces années, j'ai écrit des sous-requêtes pour sélectionner MAX, MIN, etc. Je ne savais pas que cela fonctionnait aussi bien. Merci! – Zed

+0

Hmm, Il continue à vomir une erreur quand j'essaie d'utiliser ceci, même quand j'essaie la requête dans phpmyadmin il est dit "# 1111 - Utilisation invalide de la fonction de groupe". – Stanni

+0

@Stanni: Essayez-le avec une sous-requête. – Gumbo

1

SELECT * FROM carte condition WHERE AYANT positionV = MAX (positionV)

Mieux vaut utiliser avoir lorsque vous faites des agrégats.

+0

Pourquoi est-ce mieux? – rojoca

+0

@rojoca: Vous ne pouvez pas utiliser les fonctions d'agrégat dans une clause WHERE, car les expressions WHERE sont évaluées par ligne et non par groupe de lignes. –

0

wouldnt

SELECT * FROM `map` WHERE 1 ORDER BY `positionV` DESC LIMIT 1 

suffisant?

Quel est le poids de la ressource des différentes méthodes données, quelqu'un sait?

+0

Si la table a un index sur 'positionV', toutes ces requêtes seront optimisées pour trouver simplement la ligne avec la plus grande valeur dans l'index (ie le dernier élément dans un index ascendant-sort) et retourner le contenu de cette ligne . 1 recherche de page pour l'index, 1 recherche de page pour la ligne du tableau, en supposant que ni l'un ni l'autre ne sont dans le cache. – dcrosta

+0

so SELECT * FROM carte O WH la condition POSITIONV = MAX (positionV) est plus efficace? – DBunting

Questions connexes