begin process at 2012 05 30 23:09:40
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Base de données

 > 

MySQL

 > 

empêcher les lignes doublées


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

empêcher les lignes doublées

lundi 12 octobre 2009 à 23:40:44 | empêcher les lignes doublées

abdeslam2009

Salut
j'ai tenté de sélectionner plusieurs champs dans plusieurs tables(jointures) mais le problème que j'ai rencontré les lignes retournées sont doublées.

j'ai utilisé la fonction distinct mais toujours le meme problème aussi j'ai utilisé la fonction group by les lignes retourner ne sont pas doublées mais cette fois ici une colonne qui retourne doublé voilà la requête et les tables (elles sont en jointures) vous pouvez faire copier et coler les tables dans un editeurs puis executer la requête pour les choses être en calire:

--------------------ce code est bien testé chez moi----------
-- Structure de la table `article`
--

CREATE TABLE `article` (
`article_id` int(10) NOT NULL auto_increment,
`sous_famille_id` int(10) NOT NULL,
`code_unite` int(10) default NULL,
`code_tva` int(10) default NULL,
`code_article` varchar(10) default NULL,
`designation` varchar(150) default NULL,
`observation` varchar(200) default NULL,
`prix_unitaire` decimal(15,2) default NULL,
PRIMARY KEY (`article_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=25 ;

--
-- Contenu de la table `article`
--

INSERT INTO `article` (`article_id`, `sous_famille_id`, `code_unite`, `code_tva`, `code_article`, `designation`, `observation`, `prix_unitaire`) VALUES
(1, 4, 0, 0, 'A01042', 'SALLE DE TRAITE MODEL KORU SANS MESURE_LAIT, 5 VACHES', 'teste', 150.00),
(2, 4, 0, 0, 'A01041', 'SALLE DE TRAITE MODEL KORU SANS MESURE_LAIT, 4 VACHES', 'AA', 250.00),
(4, 4, 0, 0, 'A01002', 'CHARIOT TRAYEUR BS MINI BEREKET', '', 340.00),
(5, 4, 0, 0, 'A01001', 'CHARIOT TRAYEUR BS MINI X BEREKET', '', 147.00),
(6, 4, 0, 0, 'A01004', 'CHARIOT TRAYEUR BS1 BEREKET', '', 430.00),
(7, 4, 0, 0, 'A01003', 'CHARIOT TRAYEUR BS1 X BEREKET', '', 543.00),
(8, 4, 0, 0, 'A01006', 'CHARIOT TRAYEUR BS3/1 BEREKET', '', 123.00),
(9, 4, 0, 0, 'A01005', 'CHARIOT TRAYEUR BS3/1X BEREKET', '', 65.00),
(10, 4, 0, 0, 'A01008', 'CHARIOT TRAYEUR BS3/2 BEREKET', '', 32.00),
(11, 7, 0, 0, 'B01003', 'AGNOTONIC (25 Kg)', '', 98.00),
(12, 7, 0, 0, 'B01006', 'CREMO ELEVAGE (10 Kg)', '', 98.00),
(13, 7, 0, 0, 'B01005', 'CREMO ELEVAGE (25 Kg)', '', 98.00),
(14, 7, 0, 0, 'B01004', 'VODOR ONE (25 Kg)', '', 98.00),
(15, 7, 0, 0, 'B01002', 'VODOR TA (10 Kg)', '', 98.00),
(16, 7, 0, 0, 'B01001', 'VODOR TA (25 Kg)', '', 563.00);



-- --------------------------------------------------------

--
-- Structure de la table `consultation_achat`
--

CREATE TABLE `consultation_achat` (
`consult_ach_id` int(10) NOT NULL auto_increment,
`ref_consult_ach` varchar(10) default NULL,
`date_consult_ach` date default NULL,
`etat_consult_ach` varchar(20) default NULL,
`date_etat` date default NULL,
PRIMARY KEY (`consult_ach_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=26 ;

--
-- Contenu de la table `consultation_achat`
--

INSERT INTO `consultation_achat` (`consult_ach_id`, `ref_consult_ach`, `date_consult_ach`, `etat_consult_ach`, `date_etat`) VALUES
(25, 'CA001', '2009-12-12', 'Creee', '2009-12-12');

-- --------------------------------------------------------

--
-- Structure de la table `consultation_frs`
--

CREATE TABLE `consultation_frs` (
`consult_ach_id` int(10) NOT NULL,
`fournisseur_id` int(10) NOT NULL,
`consult_frs_id` int(10) NOT NULL,
`ref_consult` varchar(15) default NULL,
`date_consult_frs` date default NULL,
`etat_consult_frs` varchar(100) default NULL,
`mode_consult_frs` varchar(50) default NULL,
`reponse_frs` varchar(50) default NULL,
`date_reponse` date default NULL,
PRIMARY KEY (`consult_ach_id`,`fournisseur_id`,`consult_frs_id`),
KEY `Consultation_Achat_FK2` (`consult_ach_id`),
KEY `Fournisseur_FK` (`fournisseur_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Contenu de la table `consultation_frs`
--

INSERT INTO `consultation_frs` (`consult_ach_id`, `fournisseur_id`, `consult_frs_id`, `ref_consult`, `date_consult_frs`, `etat_consult_frs`, `mode_consult_frs`, `reponse_frs`, `date_reponse`) VALUES
(25, 4, 1, 'RF001', '2009-12-13', 'Creee', 'Telephone', NULL, NULL),
(25, 4, 2, 'RF001', '2009-12-13', 'Creee', 'Telephone', NULL, NULL),
(25, 4, 3, 'RF001', '2009-12-13', 'Creee', 'Telephone', NULL, NULL);

-- --------------------------------------------------------

--
-- Structure de la table `consult_frs_art`
--

CREATE TABLE `consult_frs_art` (
`consult_ach_id` int(10) NOT NULL,
`article_id` int(10) NOT NULL,
`qte_consult` decimal(5,2) default NULL,
PRIMARY KEY (`consult_ach_id`,`article_id`),
KEY `Consultation_Achat_FK` (`consult_ach_id`),
KEY `Article_FK2` (`article_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Contenu de la table `consult_frs_art`
--

INSERT INTO `consult_frs_art` (`consult_ach_id`, `article_id`, `qte_consult`) VALUES
(25, 7, 23.00),
(25, 10, 12.00),
(25, 13, 10.00);

-- --------------------------------------------------------

--
-- Structure de la table `fournisseur`
--

CREATE TABLE `fournisseur` (
`fournisseur_id` int(10) NOT NULL auto_increment,
`nom_fournisseur` varchar(50) NOT NULL,
`activite` varchar(100) default NULL,
`raison_sociale` varchar(50) default NULL,
`categorie` varchar(30) default NULL,
`adresse` varchar(30) default NULL,
`code_postal` varchar(20) default NULL,
`ville` varchar(30) default NULL,
`pays` varchar(20) default NULL,
`contact` varchar(20) default NULL,
`interlocuteur` varchar(20) default NULL,
`telephone` varchar(10) default NULL,
`mobile` varchar(10) default NULL,
`email` varchar(30) default NULL,
`web` varchar(20) default NULL,
`mode_paiement_prefere` varchar(20) default NULL,
PRIMARY KEY (`fournisseur_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;

--
-- Contenu de la table `fournisseur`
--

INSERT INTO `fournisseur` (`fournisseur_id`, `nom_fournisseur`, `activite`, `raison_sociale`, `categorie`, `adresse`, `code_postal`, `ville`, `pays`, `contact`, `interlocuteur`, `telephone`, `mobile`, `email`, `web`, `mode_paiement_prefere`) VALUES
(1, '3S', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '05 22 99 2', NULL, NULL, NULL, NULL),
(2, 'AGRIDEV', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(3, 'AGSOL', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(4, 'AMAZON VERTE', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(5, 'BELGOMA', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(6, 'BRENNTAG', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(7, 'BRIOR', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(8, 'CADILHAK', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(9, 'CAPFI', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '00 22 40 7', NULL, NULL, NULL, NULL),
(10, 'CASA-MEDICAL', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(11, 'CASAPERLA', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(12, 'CLINICA', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);


------------------la fin de cration des tables-------





---voilà la requete aussi il est testé chez moi------
select consultation_frs.consult_frs_id,consult_frs_art.article_id,
fournisseur.fournisseur_id,consultation_frs.consult_ach_id
,article.code_article as code_article,consult_frs_art.qte_consult as qte_consult ,nom_fournisseur,ref_consult,date_consult_frs,etat_consult_f­rs,mode_consult_frs from article,consult_frs_art,consultation_frs,fournisseur,consult­ation_achat where fournisseur.fournisseur_id=consultation_frs.fournisseur_id and consultation_achat.consult_ach_id=consult_frs_art.consult_ac­h_id and article.article_id=consult_frs_art.article_id and consultation_achat.consult_ach_id=consultation_frs.consult_a­ch_id
-------------------------la fin de la requete------





c'est urgant je veux savoir est ce qu'il ya une autre fonction spéciale sans distint qui êmpeche les lignes doublées car je trouve ça bizzar!!!
mardi 13 octobre 2009 à 07:53:13 | Re : empêcher les lignes doublées

syndrael

Si tes lignes sont doublées c'est qu'il y a un souci de jointure. Remplace ton Select ... par Select * et vois l'élement qui change.
Ou alors regarde la commande Group by en SQL
S.
mardi 13 octobre 2009 à 09:39:58 | Re : empêcher les lignes doublées

abdeslam2009

Bonjour
merci pour ta réponse mais la réquete est juste,j'ai essayé de remplacer select par selecr * mais toujoure le même problème
mardi 13 octobre 2009 à 10:20:01 | Re : empêcher les lignes doublées

neigedhiver

Salut,

Non, il n'y a pas de soucis de jointure. Jetez un oeil à la doc de MySQL sur les jointures, ce comportement est tout à fait normal.
Pour deux tables possédant respectivement x et y lignes, une jointure retournera x*y lignes, c'est à dire qu'elle fera correspondre chaque ligne d'une table à chaque ligne de l'autre.
Il faut utiliser la clause WHERE pour éliminer les lignes que l'on ne veut pas. Encore une fois, tout est dans la doc.

--
Neige

N'hésitez pas à lire la doc
mardi 13 octobre 2009 à 10:54:00 | Re : empêcher les lignes doublées

abdeslam2009

Ok merci je vais essayer
mardi 13 octobre 2009 à 12:41:46 | Re : empêcher les lignes doublées

syndrael

Comment filtres-tu des lignes doubles avec le Where ??
Pour en revenir au select * il est là pour te donner une piste de réflexion du 'Pourquoi j'en ai plusieurs..??'
Ton souci se situe sur la colonne consult_frs_id et ta table consultation_frs
S.

mardi 13 octobre 2009 à 13:05:17 | Re : empêcher les lignes doublées

neigedhiver

Le problème de faire des jointures, c'est qu'on obtient généralement des résultats inattendus quand on ne sait pas très précisément comment fonctionnent les jointures. Surtout quand celles-ci sont implicites.

Le mieux est encore de définir des jointures explicites (INNER JOIN, LEFT JOIN, STRAIGTH JOIN, etc) en fonction du résultat que l'on souhaite obtenir. Mais pour ça, il faut savoir précisément ce qu'on veut obtenir, ce qui implique d'être capable de reproduire manuellement (sur papier par exemple) la jointure que le SGBD va effectuer. Avancer au hasard en tatonnant ne donne jamais grand chose de vraiment positif : au final, ça peut marcher, mais on ne sait pas trop pourquoi, donc on ne pourra pas faire évoluer le code si besoin, sauf à tout recommencer, sans vraiment comprendre une fois de plus comment on va faire pour que ça fonctionne...

C'est que DBA, c'est un métier, et c'est pas le même que développeur, beaucoup de gens ont tendance à l'oublier.

--
Neige

N'hésitez pas à lire la doc
mardi 13 octobre 2009 à 13:59:51 | Re : empêcher les lignes doublées

syndrael

Je suis d'accord avec toi pour les jointures, mais une fois maitrisée cette notion donne les résultat qu'on lui demande. J'avoue ma préférence pour les 'Join' aussi.
Donc pour en revenir à la problématique de notre ami je reste sur ma position, c'est le fait qu'il 3 lignes dans sa table qui 'triple' les lignes identiques.. qui par la clé 'consult_frs_id'.. ne sont pas identiques.
S.
mardi 13 octobre 2009 à 14:24:34 | Re : empêcher les lignes doublées

abdeslam2009

encour j'ai essayé de resoudre le problème mais je n'arrive pas SVP si quelqu'un connait la solution me l'envoyé
mardi 13 octobre 2009 à 14:33:04 | Re : empêcher les lignes doublées

syndrael

Il suffit juste de lire ce que j'ai écrit. Tiens si tu veux la solution.
S.

SELECT DISTINCT consult_frs_art.article_id, fournisseur.fournisseur_id, consultation_frs.consult_ach_id, article.code_article AS code_article, consult_frs_art.qte_consult AS qte_consult, nom_fournisseur, ref_consult, date_consult_frs, etat_consult_frs, mode_consult_frs
FROM article, consult_frs_art, consultation_frs, fournisseur, consultation_achat
WHERE fournisseur.fournisseur_id = consultation_frs.fournisseur_id
AND consultation_achat.consult_ach_id = consult_frs_art.consult_ach_id
AND article.article_id = consult_frs_art.article_id
AND consultation_achat.consult_ach_id = consultation_frs.consult_ach_id

1 2

Cette discussion est classée dans : id, default, varchar, frs, consult


Répondre à ce message

Sujets en rapport avec ce message

besoin d'aide pour une analyse [ par speedylol ] j'aurais besoins d'une analyse suivant merise pour c'est table ,j'ai perdu toute mon analyse et je doit terminée mon mémoire pour remettre ce soir il problème d'update dans bdd... [ par djinko ] Bonsoir,J'ai deux tables :---------------------------------------------------------------------------------------CREATE TABLE `membre` (    `id_membre creation *.sql [ par westsider ] bonjour,je cherche un script pour creer un fichier *.sql coéplet, j'en ai qui fait ca :create table geneve ( id int(11) not null auto_increment, tit Help... [ par Neolewebmaster ] Bonjour,J'ai récupéré un script et lorseque je crée ma table: CREATE TABLE forumins(id int( 11 ) NOT NULL AUTO_INCREMENT ,nom varchar( 21 ) default NU Problème de débutant appel Mysql [ par napster24 ] Bonjour tout le monde, voilà j'ai récupérer un script fonctionnant en php et faisant appel à du SQL. Ce site est en faite un site de Direct Download L Problème avec mon fichier sql [ par pierrehs ] Bonjour, Quand j'importe le fichier sql.sql PHPMyAdmin m'indique cette erreur [i]requête SQL: -- -- Database -- CREATE TABLE `settings` ( `id` INT Problème pour modifier ma base de donnée ar l'intermédiaire de la partie admin de mon site [ par boubeuch1 ] Bonjour, Je suis en train de faire la partie administration de mon site internet. Cette partie à pour but de pouvoir ajouté dans chaque page (CREATE utiliser un login et mot de passe pour me connecter [ par msi079 ] slt. j'ai pris un exemple sur le net pour l'adapter à mon cas . mais voila que ça marche pas. alors je sollicite votre aide afin de corriger les erreu probleme importation CSV vers ma base de données [ par lalimanal ] Bonjour, J'ai un problème d'insertion de mon fichier d'extension .CSV dans plusieurs tables... J'ai essayé de résoudre ça mais en vain :/ Voilà les t je n'arrive pas à trouver l'érreur dans ma source [ par jbtv ] Bonjour à tous !!! Voici mon problème , je suis actuellement en train d'écrir un code formulaire pour envoyer dans ma bdd mysql et a chaque fois que


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,359 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales