IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

problème sous-requête SQL et order by


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5
    Points : 2
    Points
    2
    Par défaut problème sous-requête SQL et order by
    Salut,
    J'ai un problème de sous-requête, c'est la première fois que je les utilise et j'aimerais que dans une table:
    id_mess | id_topic | titre | contenu | auteur | timestamp
    en une requête sql, on récupère: le numéro du topic (pour le transmettre par un lien), le titre (pour faire le texte du lien), le timestamp du dernier message et le nombre de messages, tout ça par topic. Jusque là ça va, là où ça se complique, c'est quand je veux récupérer le nom de l'auteur du dernier message (même problème pour le créateur du topic)
    car, apparemment, je ne peux pas mettre de group by dans la sous-requête et je ne peux pas non plus récupérer la valeur du dernier timestamp récupérée avant.
    Je ne vois pas comment faire

    voici le brouillon de code qui m'affiche: "Utilisation invalide de la clause GROUP "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT id_topic, titre, MAX( timestamp ) AS "max_timestamp", COUNT( * ) AS "nb_mess", (
     
    SELECT auteur AS der_auteur
    FROM messagerie2
    WHERE timestamp = MAX(timestamp)
    GROUP BY id_topic
    )
    FROM messagerie2
    GROUP BY id_topic
    ORDER BY max_timestamp DESC
    Merci de m'aider

  2. #2
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    salut,
    je sais pas si mysql gère les vues dynamiques, tu peux essayer comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT id_topic, titre, MAX( timestamp ) AS "max_timestamp", COUNT( * ) AS "nb_mess" , mavue.der_auteur
    FROM messagerie2, (
    SELECT auteur AS der_auteur
    FROM messagerie2
    timestamp = MAX(timestamp)
    GROUP BY id_topic
    ) mavue
    GROUP BY id_topic
    ORDER BY max_timestamp DESC
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    C'est fait exprès que le WHERE soit enlevé? en tout cas ça ne marche pas avec ou sans. Le problème c'est le max(timestamp) dans le WHERE mais je ne sais pas comment l'éviter

  4. #4
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    mwarf non le where c est moi qui ai merdouillé !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT id_topic, titre, MAX( timestamp ) AS "max_timestamp", COUNT( * ) AS "nb_mess" , mavue.der_auteur
    FROM messagerie2, (
    SELECT auteur AS der_auteur
    FROM messagerie2
    GROUP BY id_topic
    having timestamp = MAX(timestamp)
    ) mavue
    GROUP BY id_topic
    ORDER BY max_timestamp DESC
    :
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    ça marche toujours pas, avec le code que tu m'as donné, il affiche: "Champ 'timestamp' inconnu dans having clause "

  6. #6
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    hum j avais pas trop fais gaffe a ta requete mais ca va pas du tout ce que tu fais !!

    pour faire des regroupements, il faut que tout ce que tu met dans le select soit dans le group by.

    de meme pour ton nombre de messages en reponse.
    Quel est le lien entre un message et sa reponse ?

    Le timestamp que tu veux est celui de la derniere reponse je suppose.

    Montre moi la structure de ta table stp.
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    messagerie2:

    | id_mess | id_topic | titre | contenu | auteur | timestamp |

    - chaque message a un id_mess unique
    - id_topic sert à déterminer à quel groupe de message appartient chaque message, un nouveau est créé à chaque ouverture de sujet
    - le titre est créé pour tout un topic
    - le contenu est différent pour chaque message (logique sinon ça sert à rien)
    - l'auteur enregistre le posteur du message
    - et timestamp le timestamp du postage du message

  8. #8
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT m.id_mess, m.titre, m.auteur, v.nombre, v.dernier, v.dernierauteur
    FROM messagerie2 m, (SELECT count(*) nombre, timestamp dernier, auteur dernierauteur FROM messageri2 WHERE id_topic = m.id_mess ORDER BY timestamp DESC LIMIT 1) v
    mais je ne sais pas si mysql gère les vues dynamiques et les requetes synchronisées.
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT m.id_mess, m.titre, m.auteur, v.nombre, v.dernier, v.dernierauteur
    FROM messagerie2 m, (
     
    SELECT count( * ) nombre, `timestamp` dernier, auteur dernierauteur
    FROM messagerie2
    WHERE id_topic = m.id_mess
    ORDER BY `timestamp` DESC
    LIMIT 1
    )v
    erreur:
    "Table inconnue 'm' dans where clause "

  10. #10
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    pas de synchro

    le je vois pas trop désolé, il va falloir faire en deux requetes je pense si tu peut pas synchroniser les deux.
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  11. #11
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Je ne sais pas si ta version de mySQL supporte cette syntaxe, mais tu peux essayer cela, pour avoir les données du dernier message et le nombre de message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT m.Id_Topic, m.id_mess, m.titre, m.auteur, v.Nombre, m.timestamp 
    FROM messagerie2 m INNER JOIN (SELECT Id_Topic, count(*) AS Nombre, MAX(timestamp) AS DerniereDate
                                   FROM messagerie2 
                                   GROUP BY Id_Topic)v 
                       ON m.id_topic = v.id_topic AND m.timestamp = v.DerniereDate
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CS4] Problème de sous-requêtes SQL avec Dreamweaver
    Par WPH2009 dans le forum Dreamweaver
    Réponses: 5
    Dernier message: 01/04/2009, 18h50
  2. Sous-requêtes SQL
    Par mandrake256 dans le forum WinDev
    Réponses: 6
    Dernier message: 21/06/2005, 10h15
  3. [SQL] Problème de requête SQL de plus de 8060 caractères ?
    Par webtheque dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 06/04/2005, 15h07
  4. [SQLserver2000][SQLServer CE] problème de requête SQL
    Par JBernn dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/01/2005, 09h29
  5. Problème de requète SQL dans un Requery
    Par Keraccess dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 22/10/2004, 14h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo