Jonction de 2 tables

cs_lesims1000 Messages postés 26 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 21 novembre 2011 - 19 mars 2010 à 19:09
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 - 25 mars 2010 à 20:32
Bonjour, je suis en train de créer un tableau de gestion de stock pour mon entreprise: le tableau se compose de la sorte:
-référence
-couleur1
-couleur2
-couleur3
etc.....


la gestion de stock se fera via des codes barres et des douchettes.
chaque code barre est unique et correspond à une référence et une couleur. si je crée qu'une seul table je me retrouverait avec X fois la même référence (X étant le nombre de couleur)
j'ai donc créer 2 tables:

table1:barre

-référence
-couleur1
-couleur2
-couleur3
etc.....

table2:code

-codeBarre
-référence
-couleur1
-couleur2
-couleur3

je cherche donc a faire un lien entre les 2 tables pour que sur mon tableau finale je n'ai qu'une seul référence et ensuite les quantités par couleurs sur la même ligne.

j'espère avoir était asse claire, c'est pas évident d'expliquer

le code PHP:
	  <?php 
    
//requete des reference
    $requete = mysql_query("SELECT reference, blanc, beige, rouge, vert, grisAntique, rougeDeMars, vertOlive, sienne, dune, bleuOrage, vertAntique FROM barre ORDER BY reference", $connexion);

if($requete)
{
while($ligne = mysql_fetch_array($requete))
{
$nbre++;
//affichage des reference
echo '
 '.$ligne['reference'].',
'.$ligne['blanc'].',
'.$ligne['beige'].',
'.$ligne['rouge'].',
'.$ligne['vert'].',
'.$ligne['grisAntique'].',
'.$ligne['rougeDeMars'].',
'.$ligne['vertOlive'].',
'.$ligne['sienne'].',
'.$ligne['dune'].',
'.$ligne['bleuOrage'].',
'.$ligne['vertAntique'].',

';
 				
}
//echo '</table>';
mysql_free_result($requete);
 }
 else
 {
echo "Impossible d'exécuter la requête de sélection !
";
 }

  ?>

je suis débutant, si le code n'est pas "propre" j'en suis désolé...
pour le moment le code affiche seulement les données de la table "barre"

25 réponses

cs_lesims1000 Messages postés 26 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 21 novembre 2011
22 mars 2010 à 11:18
Bonjour,
personne n'a d'info ou d'idée pour m'aider ?
0
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
22 mars 2010 à 11:24
Bonjour lesims1000,

La structure n'est pas très clair, peux tu donner un exemple ?


_________________________________
Min iPomme
0
cs_lesims1000 Messages postés 26 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 21 novembre 2011
22 mars 2010 à 12:55
alors effectivement avec des choses plus concrètes sa sera plus facile.
alors voici mon tableau final:
[http:/marc-serveur.homedns.org/barre_liste.php http://marc-serveur.homedns.org/barre_liste.php]
le site est encore en construction c'est donc un peut le bordel...
dans ma base MySQL j'ai 2 tables:

la 1er se nomme: barre et contient:

-la référence
-couleur1
-couleur2
etc....
en gros c'est se que contient le tableau finale.
sauf que je vais utiliser des codes barres et que chaque code barre correspond à une référence et une couleur exemple:

code barre 0001=>référence 315,018=>couleur blanc
code barre 0002=>référence 315,018=>couleur vert
etc....
du coup si je ne fait qu'une seul table je vais me retrouver avec des doublons de référence.
c'est pour sa que j'ai créer une 2eme table:

elle se nomme: code et contient:
-code_barre
-référence
-couleur
-quantité

se que je souhaite est joindre les 2 tables pour que mon tableau finale n'ai qu'une seule ligne par référence avec le nombre de barre correspondante au couleurs.
0
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
22 mars 2010 à 13:19
Moué, j'ai du mal aujourd'hui...

Peux tu faire un tableau de ce que tu as en ce moment et un tableau de ce que tu veux.

Tu peux te renseigner sur les jointures de tables mais comme je ne vois pas ce que tu veux faire je sais pas si ca répondras à ta question.
_________________________________
Min iPomme
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_lesims1000 Messages postés 26 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 21 novembre 2011
22 mars 2010 à 13:41
ok, je vais essayer tant-bien-que-mal à trouver une solution.
si quelqu'un d'autre à une idée elle sera la bienvenue !! et merci quant même tonio
0
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
22 mars 2010 à 13:43
>> Peux tu faire un tableau de ce que tu as en ce moment et un tableau de ce que tu veux obtenir ?
_________________________________
Min iPomme
0
cs_lesims1000 Messages postés 26 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 21 novembre 2011
22 mars 2010 à 13:48
ok, je vais essayer
je suis au taf sa va donc prendre un peut de temps
0
cs_lesims1000 Messages postés 26 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 21 novembre 2011
22 mars 2010 à 14:16
voila, j'ai fait un classeur excel avec tous les tableaux que j'ai, que je veut et les différentes explications.
lien
0
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
22 mars 2010 à 19:57
Et avec des requtes dans ton while ? Et un select DISTINCT...

<?php
 //requete des reference 
$requete = mysql_query("SELECT DISTINCT reference, couleur1, couleur2, couleur3, couleur4, couleur5, couleur6, couleur7, couleur8  FROM barre ORDER BY reference", $connexion); 
if($requete) 
{
?>
Référence,
9010,
1015,
3004,
6005,
gris antique,
rouge de mars,
vert olive,
sienne,
dune,
bleu orage,
vert antique,
modification,

<?php
while($ligne = mysql_fetch_array($requete))
{
$nbre++;
//affichage des reference
$subrequete = mysql_query(\"SELECT quantite FROM codebarre WHERE reference='\".$ligne['reference'].\"' AND couleur='\".$ligne['couleur1'].\"'\", $connexion);
$nbbarre = mysql_fetch_array($subrequete);
$ligne['couleur1'] = $nbbarre[\"quantite\"];

$subrequete = mysql_query(\"SELECT quantite FROM codebarre WHERE reference='\".$ligne['reference'].\"' AND couleur='\".$ligne['couleur2'].\"'\", $connexion);
$nbbarre = mysql_fetch_array($subrequete);
$ligne['couleur2'] = $nbbarre[\"quantite\"];
// Etc.
?>
----

<?php echo $ligne['reference']; ?>,
<?php echo $ligne['couleur1']; ?>,
<?php echo $ligne['couleur2']; ?>,
<?php echo $ligne['couleur3']; ?>,
<?php echo $ligne['couleur4']; ?>,
<?php echo $ligne['couleur5']; ?>,
<?php echo $ligne['couleur6']; ?>,
<?php echo $ligne['couleur7']; ?>,
<?php echo $ligne['couleur8']; ?>,
&reference=<?php echo $ligne['reference']; ?>">
" onclick="return(confirm(\'Etes-vous sûr de vouloir supprimer la direction <?php echo $ligne['reference']; ?> ?\'));">,

<?php
}
mysql_free_result($requete);
?>

<?php
}
else
{ 
echo "Impossible d'exécuter la requête de sélection !
"; 
}
?>



_________________________________
Min iPomme
0
cs_lesims1000 Messages postés 26 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 21 novembre 2011
23 mars 2010 à 11:21
merci tonio, je vais regarder sa de plus près ceta après-midi
0
cs_lesims1000 Messages postés 26 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 21 novembre 2011
23 mars 2010 à 13:10
re !!
je viens de récuperer le code et de le placer dans un fichier test.php.
le problème et qu'il n'affiche toujours pas les donnés de ma 2eme table.

je te fait un petit tableau récap pour t'expliquer se que j'ai mi dans mes tables. je crois en faite que ma 1er table ne sert à rien.
0
cs_lesims1000 Messages postés 26 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 21 novembre 2011
23 mars 2010 à 13:41
voici le tableau excel lien
0
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
23 mars 2010 à 16:26
Ce que je comprends pas bien dans ton tableau c'est à quoi servent les colonnes :
couleur1, couleur2, couleur3, couleur4, couleur5, couleur6... de ta table avec les références...



_________________________________
Min iPomme
0
cs_lesims1000 Messages postés 26 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 21 novembre 2011
23 mars 2010 à 16:39
je me pose la même question maintenant....
au début j'ai fait ces colonnes pour y mettres ne nombre de référence / couleur quant il n'y avait pas la contrainte des codes barres.maintenant il n'est plus d'actualité et la table2 peut faire le boulot seul non ?
0
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
23 mars 2010 à 16:57
Es ce que ce que tu veux c'est obtenir le tableau de droite :

Clique ici

PS le fichier est en lecture / écriture si tu veux y faire des modifs


_________________________________
Min iPomme
0
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
24 mars 2010 à 11:02
Voilà une solution fonctionnelle :
CODE PHP
<?php
// J'active le débug, à ne pas mettre sur un site en production.
error_reporting(E_ALL);
ini_set( 'display_errors', 1 );

// Je gere la connexion à ma DB ainsi que la séléction de celle-ci
$connexion =  mysql_connect('localhost', "root", 'root') or die("erreur connex sql");
mysql_select_db('test', $connexion) or die("erreur connex sql");

// Je vais chercher toutes les couleurs
$requete = mysql_query("SELECT id, couleur  FROM couleurs ORDER BY couleur", $connexion) or die("erreur sql");

// Je stoque le retour SQL dans un tableau car je vais m'en re-servir
// (Sorte de cache pour éviter de faire plusieurs fois les mêmes requetes)
$tab_couleur = array();
while ($row = mysql_fetch_assoc($requete))
{
$tab_couleur[] = $row;
}
// Je crée mon tableau
?>
Référence,
<?php
// Je liste les couleurs stoquées dans mon tableau
foreach($tab_couleur as $row)
{
?>
<?php echo $row['couleur']; ?>,
<?php
}
?>
Action,

<?php
// Je vais chercher mes références pour en afficher une par ligne
$requete = mysql_query(\"SELECT id, myreference FROM myreferences ORDER BY myreference\", $connexion) or die(\"erreur sql\");
while ($row = mysql_fetch_assoc($requete))
{
?>
----

<?php
// Premiere cellule, le numéro de la réference
echo $row['myreference']; ?>,
<?php
// Je vais aller chercher pour chaque couleur associée à la référence le nombre de code barres
// Pour comencer je vais parcourir mon tableau de couleurs
foreach($tab_couleur as $couleur)
{
// Ici je séléctionne la quantitée dans ma table code barre (SELECT quantite  FROM code_barre cb)
// cb c'est un ALIAS qui me permetteras d'utiliser cb dans ma requete au lieu de code_barre
// Je vais chercher ensuite la ligne de la table couleur_myreference qui correspond au code barre
// en me servant le la colonne couleur_reference_id de ma table code barre
// (INNER JOIN couleur_myreference cr ON cb.couleur_reference_id=cr.id)
// A ce stade la requete renvois tout les codes barres avec leurs couleurs (l'id) et leur référence (l'id)
// Or nous voulons le code barre qui à pour couleur, la couleur que nous parcourons $couleur['id'] et
// la référence que nous parcourons $row['id']
// On ajoute donc la close WHERE : (WHERE cr.myreference_id=\".$row['id'].\" AND cr.couleur_id=\".$couleur['id'])
$requete_qtt = mysql_query(\"SELECT quantite  FROM code_barre cb INNER JOIN couleur_myreference cr ON cb.couleur_reference_id=cr.id WHERE cr.myreference_id=\".$row['id'].\" AND cr.couleur_id=\".$couleur['id'], $connexion) or die(\"erreur sql\");

// Il se peut que le couple \"Référence/couleur\" n'existe pas
// Si par exemple la référence 315,055 n'as pas de bleu
// Dans ce cas notre requete retourne aucune ligne et aucune quantité
// J'utilise donc un \"-\" si le couple n'existe pas (que la requete ne
// renvois pas de ligne) pour differencier ce cas de la quantité 0
if(mysql_num_rows($requete_qtt)==0)
{
$nbr = '-';
}
else
{
// Je récup la quantité...
$nbr = mysql_fetch_assoc($requete_qtt);
$nbr = $nbr['quantite'];
}
?>
<?php echo $nbr; ?>,
<?php
}
?>
">E | ">D,

<?php
}
?>

Dump SQL
-- phpMyAdmin SQL Dump
-- version 3.2.0.1
-- http://www.phpmyadmin.net
--
-- Serveur: localhost
-- Généré le : Mer 24 Mars 2010 à 10:25
-- Version du serveur: 5.1.37
-- Version de PHP: 5.2.10

SET SQL_MODE ="NO_AUTO_VALUE_ON_ZERO";

--
-- Base de données: `test`
--

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

--
-- Structure de la table `code_barre`
--

CREATE TABLE `code_barre` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `couleur_reference_id` int(11) NOT NULL,
  `quantite` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `couleur_reference_id` (`couleur_reference_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

--
-- Contenu de la table `code_barre`
--

INSERT INTO `code_barre` VALUES(1, 1, 10);
INSERT INTO `code_barre` VALUES(2, 3, 2);
INSERT INTO `code_barre` VALUES(3, 2, 8);
INSERT INTO `code_barre` VALUES(4, 7, 3);

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

--
-- Structure de la table `couleurs`
--

CREATE TABLE `couleurs` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `couleur` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

--
-- Contenu de la table `couleurs`
--

INSERT INTO `couleurs` VALUES(1, 'Vert');
INSERT INTO `couleurs` VALUES(2, 'Rouge');
INSERT INTO `couleurs` VALUES(3, 'Gris');
INSERT INTO `couleurs` VALUES(4, 'Bleu');

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

--
-- Structure de la table `couleur_myreference`
--

CREATE TABLE `couleur_myreference` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `myreference_id` int(11) NOT NULL,
  `couleur_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `couleur_id` (`couleur_id`),
  KEY `myreference_id` (`myreference_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;

--
-- Contenu de la table `couleur_myreference`
--

INSERT INTO `couleur_myreference` VALUES(1, 1, 2);
INSERT INTO `couleur_myreference` VALUES(2, 1, 3);
INSERT INTO `couleur_myreference` VALUES(3, 2, 4);
INSERT INTO `couleur_myreference` VALUES(4, 2, 1);
INSERT INTO `couleur_myreference` VALUES(7, 3, 1);
INSERT INTO `couleur_myreference` VALUES(8, 4, 1);
INSERT INTO `couleur_myreference` VALUES(9, 4, 2);
INSERT INTO `couleur_myreference` VALUES(10, 4, 4);

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

--
-- Structure de la table `myreferences`
--

CREATE TABLE `myreferences` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `myreference` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

--
-- Contenu de la table `myreferences`
--

INSERT INTO `myreferences` VALUES(1, '315,055');
INSERT INTO `myreferences` VALUES(2, '215,055');
INSERT INTO `myreferences` VALUES(3, '415,055');
INSERT INTO `myreferences` VALUES(4, '615,055');

--
-- Contraintes pour les tables exportées
--

--
-- Contraintes pour la table `code_barre`
--
ALTER TABLE `code_barre`
  ADD CONSTRAINT `code_barre_ibfk_1` FOREIGN KEY (`couleur_reference_id`) REFERENCES `couleur_myreference` (`id`);

--
-- Contraintes pour la table `couleur_myreference`
--
ALTER TABLE `couleur_myreference`
  ADD CONSTRAINT `couleur_myreference_ibfk_3` FOREIGN KEY (`myreference_id`) REFERENCES `myreferences` (`id`),
  ADD CONSTRAINT `couleur_myreference_ibfk_2` FOREIGN KEY (`couleur_id`) REFERENCES `couleurs` (`id`);




_________________________________
Min iPomme
0
cs_lesims1000 Messages postés 26 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 21 novembre 2011
24 mars 2010 à 18:29
merci tonio, sa fonctionne bien, juste une petite question: dans les tables de la base de donné, dans quel table je vais pour changer le code barre ?
0
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
25 mars 2010 à 11:40
???
Comment ca ?


_________________________________
Min iPomme
0
cs_lesims1000 Messages postés 26 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 21 novembre 2011
25 mars 2010 à 12:49
et bien les codes barres que je vais avoir pour les différentes référence, où es qu'ils se trouve dans la base de donné ? dans la table "code_barre" il n'y a que 3 colonnes: id, couleur_reference_id et nombre ??
0
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
25 mars 2010 à 13:48
Ah ok
faut organiser autrement alors ta base... Héhé je savais que j'avais pas tout suivis...


_________________________________
Min iPomme
0