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

Langage PHP Discussion :

Logique dans la BDD ?


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Points : 52
    Points
    52
    Par défaut Logique dans la BDD ?
    Bonjour,

    voilà je vais vous exposer mon petit problème
    J'ai fait une sorte de mini script qui me permet d'afficher des magazines et tous ceux que l'on a chez nous.

    En gros on peut gérer ça collection de magazine.

    donc je l'ai fait comme ceci sous les conseils d'un membre :

    Table : magazine
    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
     
    REATE TABLE `magazine` (
      `id` int(11) NOT NULL auto_increment,
      `id_magazine` int(11) NOT NULL,
      `publication` varchar(30) NOT NULL,
      `numero` varchar(10) NOT NULL,
      `numero_int` int(11) NOT NULL,
      `date` date NOT NULL,
      `prix` varchar(10) NOT NULL,
      `monnaie` varchar(20) NOT NULL,
      `hs` smallint(1) NOT NULL,
      `date_ajouter` int(10) NOT NULL,
      `valider` smallint(1) NOT NULL default '0',
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=261 DEFAULT CHARSET=utf8 AUTO_INCREMENT=261 ;
    Table : magazine_membre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE TABLE `magazine_membre` (
      `id_membre` int(11) NOT NULL,
      `id_magazine` int(11) NOT NULL,
      `numero_magazine` varchar(11) NOT NULL,
      `etat_magazine` varchar(30) NOT NULL,
      `hs` smallint(1) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    Et ma requête PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    $id_membre = 2;
     
    $req = $bdd->query('SELECT magazine_membre.etat_magazine AS mm_etat, magazine.id AS m_id, magazine.publication AS m_publication, magazine.numero AS m_numero, magazine.date AS m_date, magazine.prix AS m_prix, magazine.monnaie AS m_monnaie, magazine.hs AS m_hs 
    			FROM magazine 
    			LEFT JOIN magazine_membre
    			ON magazine_membre.numero_magazine = magazine.numero 
    			WHERE magazine_membre.id_membre='.$id_membre.' AND magazine.valider=1 
    			ORDER BY publication, numero_int');
    ?>
    Le problème c'est que j'ai 258 magazines chez moi par exemple et sur la page il m'en affiche 268 !
    Donc le problème vient je pense du fait qu'il y a des magazines Hors série ("hs" qui vaut dans la table "1 pour oui" ou "0 pour non").

    Du coup je pense qu'il me compte deux fois le magazine...

    Comment faire pour faire en sorte que si je mets que le magazine soit hors série donc vaut 1 dans la table il me le définit comme hors série ?

    Merci, je suis un peu perdu ^^

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    avec votre requete si il y a 2 membre qui on le méme magasin alor le magasin va etre afficher 2 fois je croi que c'est pour ça que le nombre afficher et plus grand que le nombre des magasin
    A la recherche d'un film : http://chercher-un-film.com

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Points : 52
    Points
    52
    Par défaut
    Non ce n'est pas possible vu que je recupère que les magazines du membre de l'id "2" dans cette exemple.

    Donc je ne peux pas avoir d'autre id que celui du membre 2, le problème vient plus du fait qu'il y a des Hors séries je pense mais du coup comment faire ça...

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 36
    Points : 44
    Points
    44
    Par défaut
    Je souhaite t'aider mais j'ai un peu de mal a comprendre le sujet.

    Peux tu donnés un export de ta base avec des données afin de mieux comprendre.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Points : 52
    Points
    52
    Par défaut
    Ok voilà un exemple :

    Table magazine_membre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    INSERT INTO `magazine_membre` VALUES (2, 1, '2851', 'Bon', 0);
    INSERT INTO `magazine_membre` VALUES (2, 1, '2827', 'Bon', 0);
    INSERT INTO `magazine_membre` VALUES (2, 1, '2904', 'Bon', 0);
    INSERT INTO `magazine_membre` VALUES (2, 1, '2812', 'Bon', 1);
    INSERT INTO `magazine_membre` VALUES (2, 1, '2905', 'Bon', 0);
    INSERT INTO `magazine_membre` VALUES (2, 1, '2822', 'Bon', 0);
    Table magazine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    INSERT INTO `magazine` VALUES (1, 1, 'Mon super magazine', '2938', 2938, '2008-10-08', '1.00', 'EUR', 0, 1284301129, 1);
    INSERT INTO `magazine` VALUES (2, 1, 'Mon super magazine', '2935', 2935, '2008-09-17', '1.00', 'EUR', 0, 1284301129, 1);
    INSERT INTO `magazine` VALUES (3, 1, 'Mon super magazine', '2823', 2823, '2006-07-26', '1.00', 'EUR', 0, 1284301129, 1);
    INSERT INTO `magazine` VALUES (4, 1, 'Mon super magazine', '2871-2872', 2871, '2007-06-27', '1.00', 'EUR', 0, 1284301129, 1);
    INSERT INTO `magazine` VALUES (5, 3, 'Mon super magazine3', '2914', 2914, '2008-04-23', '1.00', 'EUR', 0, 1284301129, 1);
    INSERT INTO `magazine` VALUES (6, 1, 'Mon super magazine', '2907', 2907, '2008-03-05', '0.00', 'EUR', 1, 1284301129, 1);
    C'est un tout petit exemple ça sert à rien de mettre toute les lignes

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 36
    Points : 44
    Points
    44
    Par défaut
    Pourquoi y a t il 2 id dans la table magazine id, id_magazine?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Points : 52
    Points
    52
    Par défaut
    Le premier c'est l'id de la ligne et l'autre c'est l'id du magazine, chaque magazine a un id propre a lui,

    Par exemple mon_super_magazine a comme id 1 et mon_super_magazine3 a pour id 6 par exemple.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 36
    Points : 44
    Points
    44
    Par défaut
    Il faut que tu lie le numéro du magazine mais aussi l'id du magazine car tu peux avoir deux magazine qui auront un id différent mais qui auront le même numéro je me suis fait comprendre?

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Points : 52
    Points
    52
    Par défaut
    Oui c'est déjà le cas

    Tout marche mais le problème c'est que si j'ai un hors série là ça plante

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 36
    Points : 44
    Points
    44
    Par défaut
    Pourtant je ne vois pas de tel liaison dans ta requete je ne vois pas en quoi tes hs peuvent faire planter ta requête en tous cas avec la requete que tu donnes

    Essai cela et dis moi le nombre de résultats que tu obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT magazine_membre.etat_magazine AS mm_etat, magazine.id AS m_id, 
        magazine.publication AS m_publication, magazine.numero AS m_numero, 
        magazine.date AS m_date, magazine.prix AS m_prix, magazine.monnaie AS m_monnaie, 
        magazine.hs AS m_hs 
     
    FROM magazine, magazine_membre
     
    WHERE magazine_membre.id_magazine = magazine.id_magazine and magazine_membre.numero_magazine = magazine.numero and magazine_membre.id_membre='2' AND magazine.valider=1 
     
    ORDER BY publication, numero_int

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Points : 52
    Points
    52
    Par défaut
    Non ça ne plante pas ma requête fonctionne mais en gros faudrait faire dans la requête :

    si hs = 1 c'est un or série sinon c'est un magazine

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 36
    Points : 44
    Points
    44
    Par défaut
    Ah ok alors essai :

    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
     
    (SELECT magazine_membre.etat_magazine AS mm_etat, magazine.id AS m_id, 
    	magazine.publication AS m_publication, magazine.numero AS m_numero, 
    	magazine.date AS m_date, magazine.prix AS m_prix, magazine.monnaie AS m_monnaie, 
    	magazine.hs AS m_hs, 'HORSSERIE' as typemagazine 
     
    FROM magazine, magazine_membre
     
    WHERE magazine_membre.id_magazine = magazine.id_magazine and magazine_membre.numero_magazine = magazine.numero and magazine_membre.id_membre='2' AND magazine.valider=1 AND magazine.hs = 1 )
     
    UNION 
     
    (SELECT magazine_membre.etat_magazine AS mm_etat, magazine.id AS m_id, 
        magazine.publication AS m_publication, magazine.numero AS m_numero, 
        magazine.date AS m_date, magazine.prix AS m_prix, magazine.monnaie AS m_monnaie, 
        magazine.hs AS m_hs, 'NORMAL' as typemagazine 
     
    FROM magazine, magazine_membre
     
    WHERE magazine_membre.id_magazine = magazine.id_magazine and magazine_membre.numero_magazine = magazine.numero and magazine_membre.id_membre='2' AND magazine.valider=1 AND magazine.hs = 0)
    Qui te sortira en type magazine normal ou hors série, mais je vois pas bien l'interet en fait

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Points : 52
    Points
    52
    Par défaut
    Comme ça il me sort tout les magazines que le membre à chez lui.

    mais le souci c'est que comme j'ai dès hors série qui ont le même numéro que d'autre magazine non hors série il me l'affiche deux fois et c'est ça que je sais pas comment faire.

    Comme ça le membre à vraiment tout les magazines qu'il a chez lui afficher, donc si il a un normal + un hors série avec le même numéro on affiche les deux etc...

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 36
    Points : 44
    Points
    44
    Par défaut
    Si un magazine hors série a le même numéro qu'un autre magazine normal, il n'ont pas le même id d'ou la nécessité de faire une liaison sur l'id. Toute tu peux ajouter une nième liaison sur le hs. magazine.hs = magazine_menbre.hs

  15. #15
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 191
    Points : 275
    Points
    275
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT magazine_membre.etat_magazine AS mm_etat, magazine.id AS m_id, magazine.publication AS m_publication, magazine.numero AS m_numero, magazine.date AS m_date, magazine.prix AS m_prix, magazine.monnaie AS m_monnaie, MAX(magazine.hs) AS m_hs 
    			FROM magazine 
    			LEFT JOIN magazine_membre
    			ON magazine_membre.numero_magazine = magazine.numero 
    			WHERE magazine_membre.id_membre='.$id_membre.' AND magazine.valider=1 
    			ORDER BY publication, numero_int'
    GROUP BY magazine.id
    avec max tu récupère le plus gros chiffre hs
    avec group by tu regroupe les lignes avec magazine.id identique
    attention pas de max sans group by

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Points : 52
    Points
    52
    Par défaut
    Le problème avec ta requête c'est qu'il va me grouper justement les magazines non ?

    Donc si j'ai par exemple 3 fois le même magazine chez moi je l'aurais qu'une fois sur ma page ?

    Moi je voudrais l'afficher autant de fois qu'il apparait dans la BDD vu que si j'ai 3 magazine faut l'afficher trois fois.

    Merci de votre aide

    PS : Je viens de tester ta requête et elle ne m'affiche aucun hors série j'obtiens 230 résultats au lieu de 258.

Discussions similaires

  1. Problème d'ajout multiples dans un BDD Access
    Par arnaud_verlaine dans le forum Langage SQL
    Réponses: 3
    Dernier message: 31/05/2004, 13h34
  2. Comment créer une Table dans 1 Bdd ACCESS avec Builder??
    Par makandja dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/03/2004, 20h21
  3. Afficher une image JPG qui se trouve dans une bdd
    Par Harry dans le forum Bases de données
    Réponses: 6
    Dernier message: 27/02/2004, 10h51
  4. Comment stocker du multimédia dans ma bdd?
    Par Invité dans le forum Décisions SGBD
    Réponses: 9
    Dernier message: 22/08/2003, 09h44
  5. Changements de colonnes dans une BDD MySQL
    Par arnaud_verlaine dans le forum Requêtes
    Réponses: 8
    Dernier message: 07/08/2003, 11h33

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