Se connecter / S'enregistrer
Votre question

[résolu]Liaison entre table mysql

Tags :
  • MySQL
  • Sql
  • Design
  • Programmation
Dernière réponse : dans Programmation
16 Octobre 2012 15:01:30

Bonjour à tous,

Voilà je bloque aujourd'hui car je voudrais effectué une relation entre deux 3 tables dans une base de donnée Mysql.
J'ai un table articles//entree//sortie : je voudrais que la table entree s'ajoute sur la table articles et que la table sortie se retire de la table articles (c'est pour une gestion de stock via formulaire)

Il y à surement des erreur je sais! (je débute..)
Petite précision je veux juste une liaison entre les tables de quantités.

Je vous met ma base complète et le formulaires de sortie (celui d’entrée et le même):

  1. -- phpMyAdmin SQL Dump
  2. -- version 3.4.10.1deb1
  3. -- http://www.phpmyadmin.net
  4. --
  5. -- Client: localhost
  6. -- Généré le : Mar 16 Octobre 2012 à 14:15
  7. -- Version du serveur: 5.5.24
  8. -- Version de PHP: 5.3.10-1ubuntu3.4
  9.  
  10. SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
  11. SET time_zone = "+00:00";
  12.  
  13.  
  14. /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
  15. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
  16. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
  17. /*!40101 SET NAMES utf8 */;
  18.  
  19. --
  20. -- Base de données: `stock`
  21. --
  22.  
  23. -- --------------------------------------------------------
  24.  
  25. --
  26. -- Structure de la table `articles`
  27. --
  28.  
  29. CREATE TABLE IF NOT EXISTS `articles` (
  30. `id` INT(11) NOT NULL AUTO_INCREMENT,
  31. `refrdv` VARCHAR(255) NOT NULL,
  32. `design` VARCHAR(255) NOT NULL,
  33. `reffour` VARCHAR(255) NOT NULL,
  34. `qtestock` VARCHAR(255) NOT NULL,
  35. `fournisseur` VARCHAR(255) NOT NULL,
  36. `tarifu` VARCHAR(255) NOT NULL,
  37. `tariftot` VARCHAR(255) NOT NULL,
  38. `etat` VARCHAR(255) NOT NULL,
  39. `date` datetime NOT NULL,
  40. PRIMARY KEY (`id`)
  41. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
  42.  
  43. --
  44. -- Contenu de la table `articles`
  45. --
  46.  
  47. INSERT INTO `articles` (`id`, `refrdv`, `design`, `reffour`, `qtestock`, `fournisseur`, `tarifu`, `tariftot`, `etat`, `date`) VALUES
  48. (1, 'rdv1', 'filtre huile actros', 'a00444111222', '5', 'mercedes', '5', '25', 'ok', '2012-10-15 00:00:00'),
  49. (2, 'rdv1', 'test', '054621365', '5', 'iveco', '11', '55', 'ok', '2012-10-15 16:33:44'),
  50. (3, 'rdv1', 'test', '054621365', '5', 'iveco', '11', '55', 'ok', '2012-10-15 16:58:26');
  51.  
  52. -- --------------------------------------------------------
  53.  
  54. --
  55. -- Structure de la table `entree`
  56. --
  57.  
  58. CREATE TABLE IF NOT EXISTS `entree` (
  59. `id` INT(11) NOT NULL AUTO_INCREMENT,
  60. `refrdv` VARCHAR(255) NOT NULL,
  61. `design` VARCHAR(255) NOT NULL,
  62. `qteajout` VARCHAR(255) NOT NULL,
  63. `immat` VARCHAR(255) NOT NULL,
  64. `date` datetime NOT NULL,
  65. PRIMARY KEY (`id`)
  66. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;
  67.  
  68. --
  69. -- Contenu de la table `entree`
  70. --
  71.  
  72. INSERT INTO `entree` (`id`, `refrdv`, `design`, `qteajout`, `immat`, `date`) VALUES
  73. (1, 'rdv1', 'test', '3', '160 dhh', '2012-10-15 16:19:23'),
  74. (8, 'rdv1', 'test', '3', '160 dhh', '2012-10-15 17:00:44');
  75.  
  76. -- --------------------------------------------------------
  77.  
  78. --
  79. -- Structure de la table `sortie`
  80. --
  81.  
  82. CREATE TABLE IF NOT EXISTS `sortie` (
  83. `id` INT(11) NOT NULL AUTO_INCREMENT,
  84. `refrdv` VARCHAR(255) NOT NULL,
  85. `design` VARCHAR(255) NOT NULL,
  86. `qtesortie` VARCHAR(255) NOT NULL,
  87. `immat` VARCHAR(255) NOT NULL,
  88. `date` datetime NOT NULL,
  89. PRIMARY KEY (`id`)
  90. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
  91.  
  92. --
  93. -- Contenu de la table `sortie`
  94. --
  95.  
  96. INSERT INTO `sortie` (`id`, `refrdv`, `design`, `qtesortie`, `immat`, `date`) VALUES
  97. (1, 'rdv1', 'test', '3', '160 dhh', '2012-10-15 16:14:18'),
  98. (2, 'rdv1', 'test', '3', '160 dhh', '2012-10-15 16:18:16'),
  99. (3, 'rdv1', 'test', '3', '160 dhh', '2012-10-15 16:58:49'),
  100. (4, 'rdv1', 'test', '3', '160 dhh', '2012-10-15 17:00:31');
  101.  
  102. /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
  103. /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
  104. /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;



formulaire :
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8" />
  5. <title>Gestion_stock-sortie</title>
  6. <link href="style.css" rel="stylesheet" type="text/css">
  7. <link href='http://fonts.googleapis.com/css?family=ABeeZee' rel='stylesheet' type='text/css'>
  8. <link href='http://fonts.googleapis.com/css?family=Scada' rel='stylesheet' type='text/css'>
  9. </head>
  10. <body>
  11. <div id="global"><form name="stock" method="post" action="traitementsortie.php">
  12. </br></br>
  13. <span style="font-family: 'ABeeZee', sans-serif; font-size: 22px;">SORTIE DE STOCK</span>
  14. </br>
  15. </br>
  16. </br><span style="font-family: 'Scada', sans-serif;font-size: 16px;">
  17. <label for="refrdv">REF RDV :</label><input type="text" name="refrdv">
  18. </br></br>
  19. <label for="design">Designation :</label><input type="text" name="design">
  20. </br></br>
  21. <label for="qtesortie">Quantitee sortie :</label><input type="text" name="qtesortie">
  22. </br></br>
  23. <label for="immat">Immatriculation :</label><input type="text" name="immat"></span>
  24. </br></br></br>
  25. </br>
  26. </br>
  27. <input type="submit" value="Envoyer" >
  28. </br>
  29. <input type="reset" value="Recommencer" >
  30. </form>
  31. </div>
  32. </body>
  33. </html>


Dites moi si vous voulez plus d'infos et merci de votre aide!

Autres pages sur : resolu liaison table mysql

a c 232 L Programmation
16 Octobre 2012 15:59:49

Salut,

Je comprends pas pourquoi tu as 3 tables comme ça.
Tu veux garder un historique des entrées / sorties ?

Pour moi, tu fais tes calculs normalement dans ta table articles, où tu ajoutes/retires les quantités qu'il faut en fonction des entrées/sorties. Et si tu veux un historique des entrées/sorties, tu peux les stocker aussi dans ces tables là.
Mais pas de liaison à faire avec ces 3 tables.
16 Octobre 2012 16:25:03

Re,

Oui j'ai besoin d'avoir un historique des sorties et des entrées de pièces.
En gros je t'explique ce que je veux faire :

Niveau formulaire :
Un formulaire de sortie de pièces qui insere dans la table sortie
Un formulaire d'entrée de pièces qui insere dans la table entree
Un formulaire de création de pièces qui insere dans la table articles

Niveau base de donnée :
Une table avec tous les articles
Une tables avec les sorties
Une tables avec les entrées

Actuellement les 3 formulaires fonctionnent et j'arrive à intégrer les données dans chaque tables mais je voudrais que les quantitées de la table articles se calculs automatiquement selon données envoyés via les formulaires de sorties et d'entrées.
C'est une petite gestion de stock basique et facile (je n'ai pas besoin de plus!)
Contenus similaires
a c 232 L Programmation
16 Octobre 2012 16:33:21

Méthode 1)
Soit tu fais tes mises à jour de la table articles au même moment où tu insères tes données dans les tables entree/sortie.
C'est à dire que quand tu insères 3 de quantité en entree, tu fais un UPDATE de ta table articles pour mettre à jour la quantité de l'article et lui mettre +3.
Par exemple :
  1. UPDATE articles SET qtestock = qtestock + 3 WHERE ID = ?



Méthode 2)
Soit tu n'as pas de qtestock dans ta table articles, et tu fais une liaison avec les tables entree/sortie quand tu veux calculer ta quantité.
Une requête de ce genre (à voir pour les liasons entre les tables, ça serait plus simple d'utiliser l'ID d'un article) :
  1. SELECT articles.*, (entree.qteajout - sortie.qtesortie) AS quantite
  2. FROM articles
  3. INNER JOIN entree ON articles.refrdv = entree.refrdv AND articles.design = entree.design
  4. INNER JOIN sortie ON articles.refrdv = sortie.refrdv AND articles.design = sortie.design



Edit: et pour revenir sur ma phrase "ça serait plus simple d'utiliser l'ID d'un article".
Je ne pense pas que tes colonnes soient bonnes pour entree et sortie.
J'aurais tendance à avoir l'ID de l'articles dedans pour pouvoir faire mes liaisons.

  1. CREATE TABLE IF NOT EXISTS `entree` (
  2. `id` INT(11) NOT NULL AUTO_INCREMENT,
  3. `article_id` INT(11) NOT NULL,
  4. `qteajout` VARCHAR(255) NOT NULL,
  5. `immat` VARCHAR(255) NOT NULL,
  6. `date` datetime NOT NULL,
  7. PRIMARY KEY (`id`)
  8. )


(à quoi sert 'immat' ??)
Et comme ça, dans tes formulaires d'ajout/sortie, tu peux proposer les différents articles directement, plutôt que de devoir les entrer manuellement, c'est comme ça qu'on se trompe.
Tu fais une <select> avec tous tes articles.
16 Octobre 2012 16:39:38

Omar,

Merci de ton aide rapide une fois de plus!!
Je travaille dessus ce soir, Je penses opté pour la méthode 1!
En gros si j'ai bien compris :

Pour l'entrée de pièces : je met un UPDATE articles SET qtestock = qtestock + 3 WHERE ID = ?
idem pour la sortie

Donc je garde seulement la table articles ?
Je ne ferme pas encore le sujet car je ne suis pas sur de bien réussir à le faire seul donc je re-poste ce soir très certainement :) 
16 Octobre 2012 16:46:07

Le select est prévu forcément pas de manuel trop d’erreurs comme tu dis!
'immat' sert à dire pour quel Immatriculation la pièce à t-elle était sortie ( c'est hyper important pour moi )
a c 232 L Programmation
16 Octobre 2012 17:11:16

vqle a dit :
Omar,

Merci de ton aide rapide une fois de plus!!
Je travaille dessus ce soir, Je penses opté pour la méthode 1!
En gros si j'ai bien compris :

Pour l'entrée de pièces : je met un UPDATE articles SET qtestock = qtestock + 3 WHERE ID = ?
idem pour la sortie

Donc je garde seulement la table articles ?
Je ne ferme pas encore le sujet car je ne suis pas sur de bien réussir à le faire seul donc je re-poste ce soir très certainement :) 


Euh non, si tu veux un historique tu peux conserver tes tables entree/sortie, ça te permet de voir ce qui a été sorti récemment par exemple.
C'est juste que quand tu insères les données dans ta table entree ou sortie, tu mets aussi à jour ta table articles.

Pour la requête, il faut bien évidemment mettre une valeur au paramètre ID, mais tu as le principe ;) 
16 Octobre 2012 17:18:51

D'accord,

Je résume :
Je garde mon insert into pour la table de sortie ou d'entree et je rajoute la table update ... pour la table articles avec les ID articles.

Je met en résolu et je recreer un sujet si je suis embêter pour le code.

Merci
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS