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 d'affichage dans la récupération de donnée


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 27
    Points : 15
    Points
    15
    Par défaut Problème d'affichage dans la récupération de donnée
    bonjour à tous

    J'ai un petit souci lors de la conception de ma requête que j'utilise pour un site d'enchère au clic. Celle-ci me permet de récupéré la liste des articles, ainsi que le dernier enchérisseur. Dit comme sa, sa parait peut être simple mais ma requête Bug et me renvoi pas le dernier prix de l'article

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    |   Articles(id)   |   Prix Afficher   |   Dernier prix enregistrés dans la table   |
    |------------------|-------------------|--------------------------------------------|
    |        1         |        0.28       |                   0.37                     |
    |        3         |        0.04       |                   0.37                     |
    |        4         |        0.01       |                   0.19                     |


    Ma Requête ressemble à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT `A`.`id`, `A`.`titre`, `A`.`mini_img`, `A`.`prix_enchere`, `A`.`remporte_by`, `E`.`prix` , `U`.`pseudo`
    FROM `stooby_articles` `A`
    LEFT JOIN `stooby_article_enchere` `E` ON `E`.`id_article` = `A`.`id`
    LEFT JOIN `Stooby_user` `U` ON `U`.`id` = `E`.`id_pseudo`
    WHERE `A`.`date_debut` < CURRENT_TIMESTAMP() AND ADDDATE(`A`.`date_fin`, INTERVAL 15 MINUTE) > CURRENT_TIMESTAMP()
    GROUP BY `A`.`id`
    Comme vous pouvez le constater, il 1 Table qui contient les articles, 1 seconde qui contient toutes les enchères des articles en ligne et la dernière me permet de récupéré le pseudo du dernier enchérisseur. Le WHERE indique qu'il faut aller chercher les articles qui sont en ligne (date_debut supérieur au timetamps actuel) et les articles qui sont fraichement fini (date_fin + 15minute inférieur au timetamps actuel). (ndlr: Pour toutes autre question je me tiens à disposition)


    Mes tables sont construite de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    --
    -- Structure de la table `stooby_articles`
    --
    CREATE TABLE IF NOT EXISTS `stooby_articles` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `titre` varchar(45) DEFAULT NULL,
      `date_debut` datetime DEFAULT NULL,
      `date_fin` datetime DEFAULT NULL,
      `description` text,
      `description_suite` text NOT NULL,
      `mini_img` varchar(200) NOT NULL,
      `prix_enchere` decimal(8,2) NOT NULL,
      `prix_reel` decimal(8,2) NOT NULL,
      PRIMARY KEY (`id`),
      KEY `date_fin` (`date_fin`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
     
    --
    -- Structure de la table `stooby_article_enchere`
    --
     
    CREATE TABLE IF NOT EXISTS `stooby_article_enchere` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `id_article` int(11) NOT NULL,
      `id_pseudo` int(11) NOT NULL,
      `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
      `prix` decimal(8,2) NOT NULL,
      PRIMARY KEY (`id`),
      KEY `prix` (`prix`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=160 ;

    Voilà donc si quelqu'un pouvait m'indiquer comment afficher correctement mes prix d'enchère, sa serai sympa. Pour le moment, les nouveau prix s'ajoute dans ma Base de donnée sans qu'il s'affiche et je suis un peu larguer

    Merci d'avance à tous ceux qui pourront m'aider, je me tiend a disposition pour toute question!

  2. #2
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 7
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    personnellement je serais plutôt parti de la table "stooby_article_enchere" avec une requête du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT *,MAX(prix) FROM stooby_article_enchere GROUP BY `id_article` LEFT JOIN ...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    A oui pas bête j'oubliais qu'il exister la fonction MAX! mais faut que je vois si c'est possible a mettre en place sachant que j'ai aussi le pseudo correspondant au prix a récupéré aussi!

    Je testerai sa dans la journée

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Quelle est la date de la dernière enchère de chaque article en ligne ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT A.id, A.titre, A.mini_img, A.prix_enchere, A.remporte_by, 
      MAX(E.`date`) AS date_max
    FROM stooby_articles A
    INNER JOIN stooby_article_enchere AS E  ON E.id_article = A.id
    WHERE A.date_debut < CURRENT_TIMESTAMP() 
      AND ADDDATE(A.date_fin, INTERVAL 15 MINUTE) > CURRENT_TIMESTAMP()
    GROUP BY A.id, A.titre, A.mini_img, A.prix_enchere, A.remporte_by
    Remarque au passage : j'ai supprimé toutes les apostrophes inversées inutiles, sauf autour de la colonne mal nommée 'date' car c'est in mot réservé du langage SQL.

    Questions :
    - N'y a t-il pas redondance entre la colonne 'prix_enchere' de la table 'stooby_articles' et la colonne 'prix' dela table 'stooby_article_enchere' ?
    - La colonne 'remporte_by' ne figure pas dans la description de vos tables. D'où vient-elle ?

    Ensuite on extrait les autres information en jointant avec la première requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    SELECT t.id AS id_article,
      t.titre, t.mini_img, t.prix_enchere,
      remporte_by, -- où est cette colonne ?
      t.date_max AS date_derniere_enchere,
      e1.prix AS prix_derniere_enchere,
      u.pseudo
    FROM (
      SELECT A.id, A.titre, A.mini_img, A.prix_enchere, A.remporte_by, 
        MAX(E.`date`) AS date_max
      FROM stooby_articles A
      LEFT JOIN stooby_article_enchere AS E  ON E.id_article = A.id
      WHERE A.date_debut < CURRENT_TIMESTAMP() 
        AND ADDDATE(A.date_fin, INTERVAL 15 MINUTE) > CURRENT_TIMESTAMP()
      GROUP BY A.id, A.titre, A.mini_img, A.prix_enchere, A.remporte_by
    ) AS t
    LEFT JOIN stooby_article_enchere AS e2 
      ON e2.id_article = t.id 
        AND e2.`date` = t.date_max
      LEFT JOIN Stooby_user U ON U.id = e2.id_pseudo

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    oui en effet j'ai retiré quelque champs inutile pour que sa soit plus lisible sur le forum.

    Pour ce qui est du prix de l'enchère dans la table articles, il correspond au prix a atteindre. Tandis que le prix dans la table enchère correspond au prix actuel.
    Quand a la date, elle me sert comme paramètre de fin de l'enchère, l'admin met une date de fin assez éloigner et une fois qu'une enchère est gagner on la modifie pour que l'enchère soit hors-ligne.

    Je vais essayer ta requête pour voir ce quel me retourne car elle me parait bizarre lol

    Edit: Ta requête ne retourne pas ce que j'aimerai ^^ mais bon dans un éclair d'illumination, je stock désormais le dernier prix et id de l'enchérisseur dans la même table que celle des articles et je garde la table enchère comme historique d'enchère. Pour le moment sa a l'air de fonctionner parfaitement!

Discussions similaires

  1. [MySQL] problème d'affichage ou de récupération de données
    Par ballantine's dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 24/07/2007, 15h53
  2. [Hibernate] problème d'insertion dans la base de données
    Par Willy7901 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 18/08/2005, 13h19
  3. [débutant]problèmes d'affichage dans un tableau
    Par Hastur dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 16/08/2005, 12h00
  4. [HTML][FORMULAIRE] Probleme dans la récupération des données
    Par baddounet dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 15/08/2005, 18h51
  5. problème de recherche dans une base de données
    Par bouzid_mehdi dans le forum Bases de données
    Réponses: 2
    Dernier message: 19/07/2005, 06h47

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