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 :

SELECT avec MYSQL


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 21
    Points : 12
    Points
    12
    Par défaut SELECT avec MYSQL
    Bonjour à tous,

    Voilà, j'ai créé un fichier clinetèle pour l'activité de ma femme.
    Tout est nickel mais je cale sur un détail.

    Quand je clique sur le nom d'un client, on arrive sur son profile et sa fiche personnelle s'affiche.

    Sous la fiche, j'ai créé un div où je veux afficher la dernière commande que ce client a fait mais je veux garder toutes les commandes dans la tables pour afficher sur une autre page toutes les commandes qu'un client x a passé depuis ses débuts.

    Voici la structure de ma table "commande" :

    id (auto - clé)
    id_client (doit correspondre à l'id de la table clients)
    nom1 (varchar)
    prix1 (varchar)
    quantite1 (varchar)
    date (date)

    Pour une commande, j'introduis chaque fois le produit + date 0000-00-00, ce qui permet de relier tous les produits d'une même commande grâce à la date.

    Donc, on fur et à mesure, la table se rempli pour les différents clients et la date évolue grâce aux nouvelles commandes.

    Ce que j'aimerais, c'est afficher uniquement la dernière commande.

    Voici ma requête :

    $requete = 'SELECT * FROM commande WHERE id_client="'.$_GET['id'].'" ORDER BY date DESC';

    Quand je fais cela, il m'affiche toutes les commandes en ordre de passage.
    J'ai essayé avec LIMIT 1 mais à ce moment là, il ne m'affiche que la premiere ligne de la table.

    Je suis perdu.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Février 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 124
    Points : 159
    Points
    159
    Par défaut
    Essaie peut-être quelque chose comme:
    SELECT * FROM commande
    WHERE id_client="'.$_GET['id'].'" AND date = (SELECT max(date) FROM commande WHERE id_client="'.$_GET['id'].'")

  3. #3
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Salut !

    le problème vient du fait que tu ne disocie pas une commande de son contenu...

    le plus logique serait de faire :
    une table commande :
    id (auto - clé)
    id_client (doit correspondre à l'id de la table clients)
    date (date)

    une table ligne de commande :
    id (auto - clé)
    id_commande (doit correspondre à l'id de la table commande)
    nom1 (varchar)
    prix1 (varchar)
    quantite1 (varchar)

    comme ça ça serait déjà plus cohérent...

    Bon, évidemment, ça ne résout pas ton problème...

    pour le résoudre avec une seule et unique requête, il te faut une sous-requête, ceci ne sera possible que pour MySQL >= 4.1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT *
    FROM commande
    WHERE
       id_client=@id_client
       AND date = (
          SELECT MAX(date)
          FROM commande
          WHERE id_client=@id_clident
       )

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Voila une partie du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $requete = 'SELECT * FROM commande WHERE id_client="'.$_GET['id'].'" AND date = (SELECT max(date) FROM commande WHERE id_client="'.$_GET['id'].'")';
            $result = mysql_query($requete);
            $nb = mysql_num_rows($result);
    et voilà l'erreur qu'il affiche :

    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/microf/public_html/clients/profile.php on line 253



  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 124
    Points : 159
    Points
    159
    Par défaut
    Tu as entouré l'id par des guillements, y'a pas besoin. Ca doit être une cause de l'erreur. Les guillements ne sont pas nécessaires pour les nombres mais juste pour les chaines et dates.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    ca ne change rien les '

  7. #7
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query(...) or die(mysql_error());
    J'ai bien précisé qu'il te fallait une version de MySQL >= 4.1 tu es sûr que c'est le cas ?

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    en faisant un phpinfo, voilà ce que j'ai pour mysql : Client API version 3.23.53a

  9. #9
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    C'est la version de MySQL en elle même qu'il faut, pas celle de l'API client, mais il y a for à parier que si l'API client est en v3, ton serveur MySQL aussi
    dans ce cas, il te faut faire deux requêtes, la première pour récupérer la date max, et la deuxième pour la commande qui correspond à cette date...

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Swoög
    C'est la version de MySQL en elle même qu'il faut, pas celle de l'API client, mais il y a for à parier que si l'API client est en v3, ton serveur MySQL aussi
    dans ce cas, il te faut faire deux requêtes, la première pour récupérer la date max, et la deuxième pour la commande qui correspond à cette date...
    Peux tu m'aider à le faire parce que je nage complètement ?

  11. #11
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $result = mysql_query('SELECT MAX(date) FROM commande WHERE id_client='.intval($_GET['id'])) or die(mysql_error());
    $max = @mysql_fetch_array($result);
    @mysql_free_result($result);
    $max = $max[0];
    $result = mysql_query('SELECT * FROM commande WHERE id_client='.intval($_GET['id']).' AND date = \''.$max.'\'') or die(mysql_error());
    à la fin du script, $result contient la ressource résultat de ta requête...

    [PS : c'est un exemple... je l'ai pas testé, c'est principalement pour que tu vois le principe ^^]

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    Merci pour tes précisions mais je suis sur Mysql 4.0 (j'ai enfin trouvé la version). J'ai rajouté un champ mode dans ma table où toutes les lignes marquées d'un 0 pour un client x = produits de la dernière commande.

    Avant l'encodage d'une nouvelle commande pour ce même client, il suffit de cliquer sur un lien qui fait passer la dernière commande en mode 1, ce qui veut dire que ce n'est plus la dernière commande.

    Voilà, j'ai fait avec mes connaissances, peut être pas la plus simple mais ca fonctionne.

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

Discussions similaires

  1. [MySQL] [MySQL] Select avec WHERE sur un champs d'une autre table ?
    Par danydan01 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 06/05/2011, 16h05
  2. [MySQL]Requête select avec double classement
    Par GyZmoO dans le forum Requêtes
    Réponses: 8
    Dernier message: 09/10/2009, 11h01
  3. Problème avec select sous MYSQL
    Par Thomad dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/01/2006, 11h26
  4. pb de select avec size avec choix multiple
    Par La_picolle dans le forum ASP
    Réponses: 10
    Dernier message: 28/08/2003, 15h21
  5. requete SELECT avec un nombre constant
    Par gurumeditation dans le forum Requêtes
    Réponses: 3
    Dernier message: 04/07/2003, 20h04

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