Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 11-02-2010 19:43:31

FloK
Membre
Date d'inscription: 19-06-2009
Messages: 19

[résolu] Selectionner une ligne avec un MAX()

Bonjour à tous,

Voilà depuis quelques heures que je suis confronté à un pb.
Je le décris un peu plus:
Je voudrais récupérer une ligne en bdd grace à la fonction mysql MAX().
Je vous mets le code que j'ai écris dans mon model

Code:

        $select = $this->_db->select();
        $select->from($this->_name, array(
                                    'id',
                                    'title',
                                    'subtitle',
                                    'description',
                                    'image',
                                    'MAX(vin_nb_visit)',
                                    'r_reg_id'));

        return $this->_db->fetchRow($select);

Cette requête ne me renvoie pas la bonne ligne, seul le nb_visit est correct...
Y a t'il une solution à part le faire en 2 fois pour récupérer d'abord le max ensuite le mettre dans une clause where ?

Merci d'avance

Dernière modification par FloK (11-02-2010 23:07:12)

Hors ligne

 

#2 11-02-2010 20:39:30

Blount
Membre
Date d'inscription: 23-06-2009
Messages: 98
Site web

Re: [résolu] Selectionner une ligne avec un MAX()

Il faut mettre un order by sur le MAX et mettre un limit à 1.

Hors ligne

 

#3 11-02-2010 21:04:34

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [résolu] Selectionner une ligne avec un MAX()

@FloK : hum... qu'est-ce que tu veux faire en SQL ?
Normalement si tu as un MAX, il te faut un GROUP BY pour dire quel maximum tu veux.

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#4 11-02-2010 21:17:36

FloK
Membre
Date d'inscription: 19-06-2009
Messages: 19

Re: [résolu] Selectionner une ligne avec un MAX()

@philippe: Je veux récupérer typiquement un fiche du produit le plus visité (le champ nb_visit)
Comment ça pour dire quel maximum je veux ?

Hors ligne

 

#5 11-02-2010 22:03:37

FloK
Membre
Date d'inscription: 19-06-2009
Messages: 19

Re: [résolu] Selectionner une ligne avec un MAX()

En effet, un order avec un limit 1 marche très bien big_smile
Mais si quelqu'un a la solution avec le MAX je la veux bien.

Sinon je passerai la post en résolu

Merci Blount, je n'avais pas pensé a cette solution très simple

Hors ligne

 

#6 11-02-2010 22:48:57

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [résolu] Selectionner une ligne avec un MAX()

@FloK : a priori MAX ne sert pas à ça, ça permet plutôt de récupérer la valeur maximale d'une liste :
tu as une table avec 3 colones : titre, category, nb_views

si tu veux connaître le nombre max de vues sur un élément classés par catégorie, tu vas faire

Code:

SELECT category, MAX(nb_views)
FROM my_table
GROUP BY category

Dans ton cas, je pense que ta requête renvoie un peu n'importe quoi : le résultat de ton max est bon (le max de la colonne), mais ça ne correspond pas forcément à la ligne renvoyée. La valeur de ton max sera la même dans toutes les lignes renvoyées (essaye dans phpmyadmin, tu verras).

Bref il faudrait faire un truc plus simple du genre

Code:

SELECT id, title,..., vin_nb_visit
FROM ta_table
ORDER BY vin_nb_visit DESC
LIMIT 1

A+, Philippe
PS : après je te laisse faire les traductions en Zend_Db_Select smile


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#7 11-02-2010 22:52:28

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [résolu] Selectionner une ligne avec un MAX()

Une solution avec max, ça serait un truc bizarre du genre :

Code:

SELECT id, title,..., vin_nb_visit
FROM ta_table
WHERE vin_nb_visit = (SELECT MAX(vin_nb_visit) FROM ta_table)
LIMIT 1

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#8 11-02-2010 23:02:39

FloK
Membre
Date d'inscription: 19-06-2009
Messages: 19

Re: [résolu] Selectionner une ligne avec un MAX()

Ah d'accord j'ai compris à quoi servait le max.
J'avais essayer la méthode avec le select dans le where mais c'était plus compliqué pour pas grand chose.
Finalement le order limit me va très bien smile

Merci pour l'aide

Hors ligne

 

#9 11-02-2010 23:05:19

Blount
Membre
Date d'inscription: 23-06-2009
Messages: 98
Site web

Re: [résolu] Selectionner une ligne avec un MAX()

Bin oui, je suis un boulet, philippe m'a heureusement corrigé ^^

Tu veux récupérer la ligne de la table avec vin_nb_visit le plus grand de toutes les autres lignes ?
Dans ce cas, le code donné un peu plus haut devrait répondre à ta demande :

philippe a écrit:

SELECT id, title,..., vin_nb_visit
FROM ta_table
ORDER BY vin_nb_visit DESC
LIMIT 1

Ceci trie par ordre décroissant les lignes en triant sur la colonne vin_nb_visit.
Tu vas donc te retrouver avec une liste de ligne avec vin_nb_visit du plus grand au plus petit.
Le LIMIT 1 sert donc à récupérer cette première ligne.

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages