problème de requête

Eléphant du PHP | 333 Messages

30 déc. 2007, 06:37

J'ai un problème avec ma requête

Premièrement là voici
$sql = "SELECT all_loan.code, all_loan.user, all_loan.date_prets, all_loan.date_retour, description.code, description.nom, description.nomfr, description.genre, description.description, description.video, description.acteur1 ,description.acteur2, description.acteur3, description.sound, description.original, description.HDDVD 
FROM all_loan RIGHT JOIN description 
ON all_loan.code=description.code
WHERE description.code='$code'"; 
Les deux tables sont relié par le "code", mon problème est que lorsqu'il me donne le résultat, toute ma fiche se répète le nombre de fois que le champ "code" se trouve dans la table all_loan, pourquoi....

Merci.!!
Ce n'est pas toujours facile d'essayer, mais c'est toujours vallorisant lorsqu'on y arrive !!!

Apprenez, ne le faite pas faire par les autres.

Eléphant du PHP | 185 Messages

30 déc. 2007, 11:36

Je ne sais pas si ça peut fonctionner sur des tables reliées par jointure, mais en principe la clause DISTINCT permet de supprimer les doublons.

Par contre ton message n'est pas posté dans la bonne rubrique du forum. Etant donné que ta question porte sur le langage SQL, attend-toi à ce qu'il soit déplacé par un modérateur !

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

30 déc. 2007, 11:50

Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "SQL & Bases de données".

Merci de prendre le temps de lire les règlements
ainsi que l'intitulé de chaque forum avant de poster un nouveau sujet.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 5924 Messages

30 déc. 2007, 11:58

Est ce que tu peux donner un échantillon de données, la structure de la table (via export sus forme CREATE TABLE …) ainsi qu'un échantillon du résultat obtenu ?

Eléphant du PHP | 333 Messages

30 déc. 2007, 16:03

OK voici ma table pour mieu comprendre

Code : Tout sélectionner

CREATE TABLE `all_loan` ( `id` int(11) NOT NULL auto_increment, `code` text NOT NULL, `user` text NOT NULL, `date_prets` text NOT NULL, `date_retour` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Liste de tous les films emprunter' AUTO_INCREMENT=31 ; -- -- Contenu de la table `all_loan` -- INSERT INTO `all_loan` VALUES (29, '000687', 'Mélanie Croteau', '1198990104', '1198990203'); INSERT INTO `all_loan` VALUES (28, '000687', 'En Attente', '1198989916', '1198990203'); INSERT INTO `all_loan` VALUES (30, '000687', 'Mélanie Croteau', '1198990508', ''); CREATE TABLE `description` ( `id` int(11) NOT NULL auto_increment, `code` text NOT NULL, `nom` text NOT NULL, `nomfr` text NOT NULL, `genre` text NOT NULL, `description` text NOT NULL, `video` text NOT NULL, `acteur1` text NOT NULL, `acteur2` text NOT NULL, `acteur3` text NOT NULL, `sound` text NOT NULL, `original` text NOT NULL, `HDDVD` text NOT NULL, `disponible` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=720 ; -- -- Contenu de la table `description` -- INSERT INTO `description` VALUES (718, '000687', 'Heartbreak Kid, The', 'Le brise-coeur', 'Comédie', 'Au cours de son voyage de noces au Mexique, un homme découvre avec consternation le caractère instable et capricieux de sa jeune épouse. N''y tenant plus, il se laisse aller à courtiser une autre jeune femme qui loge à son hôtel.', '', 'Ben Stiller', 'Michelle Monaghan', 'Jerry Stiller', '', 'copier', 'dvd', 'non');
Bon normalement l'enregistrement dan sdescription devrais apparaitre une seul fois, mais à chaque fois qu'elle est dans la table all_loan bien elle se répète..... comme en ce mement elle s'y trouve 3 fois, si le code n'est ne se trouve pas dans la table all_loan pas de trouble il y est qu'une seul fois.... mais j'ai besoin de lier les deux tables pour savoir si le CD est prèter ou pas alors je peux pas mettre limit 1 à la fin de ma requète ......

en tout cas jh'espère que ca aide a comprendre unpeu
Ce n'est pas toujours facile d'essayer, mais c'est toujours vallorisant lorsqu'on y arrive !!!

Apprenez, ne le faite pas faire par les autres.

ViPHP
ViPHP | 5924 Messages

30 déc. 2007, 18:05

en tout cas jh'espère que ca aide a comprendre unpeu
Pas qu'un peu, justement.

Tout d'abord, en voyant tes shémas, je ne peux pas ne pas te conseiller des optimisations parce là tes tables sont plutôt mal faites.

Pour la table all_loan, les date_prets et date_retour semblent être des timestamp, donc devraient être stockés dans des champs entiers. Ou alors tu peux aussi remplacer ce champ par un champ de DATE qui te permet d'utiliser les nombreuses fonctions de date fournies par MySQL.

Pour la table description, je te conseillerais des champs TINYINT ou ENUM (selon les goûts) par exemple pour original, HDDVD ou encore disponible (video et sound, je ne sais pas ce que c'est…). Concernant les acteurs, tu gagnerais plus à faire une table à part pour indiquer quels acteurs sont sur tes films, par exemple une table regroupant les acteurs, et une table fesant la correspondance entre l'id de l'acteur et l'id (ou la référence) du film, parce que sur plus d'un film, tu auras je pense plus de 3 acteurs principaux…

Enfin, sur les deux tables, la très grosse majorité des champs de type text peuvent être retypés en champs VARCHAR, je pense déjà au code qui peut être typé en CHAR(6) (mais tu peux le mettre en VARCHAR puisque de toute façon avec ton shéma, MySQL le transformera en VARCHAR). Il n'y a que la description du film qui peut rester en text (puisque peut être elle peut dépasser 255 caractères…).

Applique des typages logiques pour toutes tes tables, et met des index sur les colonnes utilisées pour les recherches (en l'occurence est ce que tu ne peux pas mettre le code seulement dans la table description, et joindre à la table all_loan avec l'id du film et non son code)
Voir : http://dev.mysql.com/doc/refman/5.0/fr/data-size.html
Et : http://dev.mysql.com/doc/refman/5.0/fr/ ... types.html

Et concernant ton problème, il faudrait juste que tu expliques en détail comment s'organise la table all_loan (ce que tu mets dedans), si chaque code correspond bien à un seul DVD (et si le champ disponible est vraiment utile), et expliquer textuellement (c'est à dire sans parler d'enregistrements et de tables) qu'est ce que ta requète est sensé te renvoyer exactement

auclairp.
Invité n'ayant pas de compte PHPfrance

03 janv. 2008, 01:31

merci je regarde cela