Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

Messages recommandés

Posté(e)

Salut,

 

Est-il possible d'écrire une fonction devant être exécutée par le serveur MySQL? Voici ce que je cherche à faire: récupérer les 10 derniers enregistrements d'une table, et si un champ donné (par exemple "nom") est redondant alors ne garder que l'enregistrement le plus récent et ainsi de suite ... jusqu'à pouvoir retourner 10 enregistrements au final.

 

Je voudrais donc savoir (beaucoup par curiosité) s'il est possible d'effectuer le traitement sur le serveur MySQL et ne donner à PHP que le résultat.

 

Merci.

Posté(e)

Je n'ai pas bien compris... Tu veux la requête qui va te permettre de retrouver ces 10 enregistrements sans avoir à retraiter les résultats dans ton code PHP, c'est ça ?

Dans ce cas, est-ce que tu peux détailler un petit peu plus, parce que tu parles des "10 derniers" sans donner le critère de tri (les 10 derniers par ordre alphabétique de nom ? par ordre de saisie dans la base ? par date de naissance du capitaine ? ...)

Posté(e) (modifié)

Exactement!

Je me suis tapé toute la doc MySQL, fait des tests avec GROUP BY à toutes les sauces (les fonctions de traitement de chaîne de caractères entre autre) mais pas trouvé ... Est-ce que c'est possible? Si oui je veux bien une piste :P

 

Je voudrais récupérer les 10 derniers sans redondance dans le champ cité, par ordre d'entrée dans la base (le plus récent en premier).

Modifié par le Visiteur
Posté(e)

"par odrre d'entrée dans la base" hum... si tu ne mets pas de date de création d'enregistrement dans tes tables, tes données sont triées "par ordre de pagaille" quand tu fais un SELECT.

 

Tu as ce champ sur lequel on va pouvoir baser nos requêtes ou pas ?

 

Imaginons : j'ai une table NOMS (NOM, DATE_CREA)

Je récupère les noms par date de création décroissante, en ne gardant qu'une seule occurrence d'un même nom (celle avec la date la plus récente) :

 

SELECT *

FROM NOMS N1

WHERE DATE_CREA = (SELECT MAX(DATE_CREA) FROM NOMS N2 WHERE N1.NOM = N2.NOM)

ORDER BY DATE_CREA DESC

 

Et une fois en PHP je ne fais afficher que les 10 premier enregistrements...

Posté(e)

WHERE DATE_CREA = (SELECT MAX(DATE_CREA) FROM NOMS N2 WHERE N1.NOM = N2.NOM)

 

Je n'ai pas bien compris ce que faisait cette ligne ...

 

Sinon j'ai un meilleur exemple, mais plus complexe: une table contient par ordre chronologique tous les titres des messages d'un forum.Or certains titres seront redondants (les réponses à des messages, donc le titre ne change pas).Cependant, ces titres-là seront précédés de "RE:".

 

Je souhaite donc afficher les 10 derniers messages actifs (un message, ou bien la réponse à un message).Sachant que chaque message et ses réponses devront compter pour un message actif.

 

Chez moi ça fume lol !

Posté(e)

WHERE DATE_CREA = (SELECT MAX(DATE_CREA) FROM NOMS N2 WHERE N1.NOM = N2.NOM)

Je n'ai pas bien compris ce que faisait cette ligne ...

Elle s'assure que l'enregistrement retourné correspond bien au plus récent pour ce nom-là...

Posté(e)

Ah ben oui ça semble plus clair merci :P

 

Pour revenir à mon dernier exemple, disons que j'ai ça dans une table:

ID TITRE

5 Ceci est un message

9 Re: Ceci est un message

11 Voici un autre message

14 Re:Ceci est un message

 

Comment faire pour que MySQL me renvoit les lignes 11 (message unique) et 14 (dernier message qui est une réponse )?

Posté(e) (modifié)
Sinon j'ai un meilleur exemple, mais plus complexe: une table contient par ordre chronologique tous les titres des messages d'un forum.Or certains titres seront redondants (les réponses à des messages, donc le titre ne change pas).Cependant, ces titres-là seront précédés de "RE:".

 

Je souhaite donc afficher les 10 derniers messages actifs (un message, ou bien la réponse à un message).Sachant que chaque message et ses réponses devront compter pour un message actif.

 

Chez moi ça fume lol !

Précise un peu, parce que là c'est vraiment pas clair.

Donne-nous aussi la composition des tables, ça pourra aider...

 

Tu veux les 10 derniers messages "tout type de message confondus" (c'est à dire de "type" question ou réponse), ou bien les 10 dernières questions accompagnées de leurs réponses ??

Tu définis le type de message, et le message auquel ça répondait, uniquement par le fait qu'il y a un "RE:" devant (pour les réponses) et par le titre du message (sans l'éventuel "RE:") pour savoir à quel thread ça appartient ??

 

Ah... grillé... :P

Modifié par KewlCat
Posté(e)
Ah ben oui ça semble plus clair merci :-)

 

Pour revenir à mon dernier exemple, disons que j'ai ça dans une table:

     ID     TITRE
 -------   ------------------
     5     Ceci est un message
     9     Re: Ceci est un message
    11     Voici un autre message
    14     Re:Ceci est un message

 

Comment faire pour que MySQL me renvoit les lignes 11 (message unique) et 14 (dernier message qui est une réponse )?

Tu comptes ignorer la ligne 5 ??

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...