Liaison table mysql
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):
-- phpMyAdmin SQL Dump
-- version 3.4.10.1deb1
-- https://www.phpmyadmin.net/
--
-- Client: localhost
-- Généré le : Mar 16 Octobre 2012 à 14:15
-- Version du serveur: 5.5.24
-- Version de PHP: 5.3.10-1ubuntu3.4
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Base de données: 'stock'
--
-- --------------------------------------------------------
--
-- Structure de la table 'articles'
--
CREATE TABLE IF NOT EXISTS 'articles' (
'id' int(11) NOT NULL AUTO_INCREMENT,
'refrdv' varchar(255) NOT NULL,
'design' varchar(255) NOT NULL,
'reffour' varchar(255) NOT NULL,
'qtestock' varchar(255) NOT NULL,
'fournisseur' varchar(255) NOT NULL,
'tarifu' varchar(255) NOT NULL,
'tariftot' varchar(255) NOT NULL,
'etat' varchar(255) NOT NULL,
'date' datetime NOT NULL,
PRIMARY KEY ('id')
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
--
-- Contenu de la table 'articles'
--
INSERT INTO 'articles' ('id', 'refrdv', 'design', 'reffour', 'qtestock', 'fournisseur', 'tarifu', 'tariftot', 'etat', 'date') VALUES
(1, 'rdv1', 'filtre huile actros', 'a00444111222', '5', 'mercedes', '5', '25', 'ok', '2012-10-15 00:00:00'),
(2, 'rdv1', 'test', '054621365', '5', 'iveco', '11', '55', 'ok', '2012-10-15 16:33:44'),
(3, 'rdv1', 'test', '054621365', '5', 'iveco', '11', '55', 'ok', '2012-10-15 16:58:26');
-- --------------------------------------------------------
--
-- Structure de la table 'entree'
--
CREATE TABLE IF NOT EXISTS 'entree' (
'id' int(11) NOT NULL AUTO_INCREMENT,
'refrdv' varchar(255) NOT NULL,
'design' varchar(255) NOT NULL,
'qteajout' varchar(255) NOT NULL,
'immat' varchar(255) NOT NULL,
'date' datetime NOT NULL,
PRIMARY KEY ('id')
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;
--
-- Contenu de la table 'entree'
--
INSERT INTO 'entree' ('id', 'refrdv', 'design', 'qteajout', 'immat', 'date') VALUES
(1, 'rdv1', 'test', '3', '160 dhh', '2012-10-15 16:19:23'),
(8, 'rdv1', 'test', '3', '160 dhh', '2012-10-15 17:00:44');
-- --------------------------------------------------------
--
-- Structure de la table 'sortie'
--
CREATE TABLE IF NOT EXISTS 'sortie' (
'id' int(11) NOT NULL AUTO_INCREMENT,
'refrdv' varchar(255) NOT NULL,
'design' varchar(255) NOT NULL,
'qtesortie' varchar(255) NOT NULL,
'immat' varchar(255) NOT NULL,
'date' datetime NOT NULL,
PRIMARY KEY ('id')
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
--
-- Contenu de la table 'sortie'
--
INSERT INTO 'sortie' ('id', 'refrdv', 'design', 'qtesortie', 'immat', 'date') VALUES
(1, 'rdv1', 'test', '3', '160 dhh', '2012-10-15 16:14:18'),
(2, 'rdv1', 'test', '3', '160 dhh', '2012-10-15 16:18:16'),
(3, 'rdv1', 'test', '3', '160 dhh', '2012-10-15 16:58:49'),
(4, 'rdv1', 'test', '3', '160 dhh', '2012-10-15 17:00:31');
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
formulaire :
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Gestion_stock-sortie</title>
<link href="style.css" rel="stylesheet" type="text/css">
<link href='http://fonts.googleapis.com/css?family=ABeeZee' rel='stylesheet' type='text/css'>
<link href='http://fonts.googleapis.com/css?family=Scada' rel='stylesheet' type='text/css'>
</head>
<body>
<div id="global"><form name="stock" method="post" action="traitementsortie.php">
</br></br>
<span style="font-family: 'ABeeZee', sans-serif; font-size: 22px;">SORTIE DE STOCK</span>
</br>
</br>
</br><span style="font-family: 'Scada', sans-serif;font-size: 16px;">
<label for="refrdv">REF RDV :</label><input type="text" name="refrdv">
</br></br>
<label for="design">Designation :</label><input type="text" name="design">
</br></br>
<label for="qtesortie">Quantitee sortie :</label><input type="text" name="qtesortie">
</br></br>
<label for="immat">Immatriculation :</label><input type="text" name="immat"></span>
</br></br></br>
</br>
</br>
<input type="submit" value="Envoyer" >
</br>
<input type="reset" value="Recommencer" >
</form>
</div>
</body>
</html>
Dites moi si vous voulez plus d'infos et merci de votre aide!
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):
-- phpMyAdmin SQL Dump
-- version 3.4.10.1deb1
-- https://www.phpmyadmin.net/
--
-- Client: localhost
-- Généré le : Mar 16 Octobre 2012 à 14:15
-- Version du serveur: 5.5.24
-- Version de PHP: 5.3.10-1ubuntu3.4
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Base de données: 'stock'
--
-- --------------------------------------------------------
--
-- Structure de la table 'articles'
--
CREATE TABLE IF NOT EXISTS 'articles' (
'id' int(11) NOT NULL AUTO_INCREMENT,
'refrdv' varchar(255) NOT NULL,
'design' varchar(255) NOT NULL,
'reffour' varchar(255) NOT NULL,
'qtestock' varchar(255) NOT NULL,
'fournisseur' varchar(255) NOT NULL,
'tarifu' varchar(255) NOT NULL,
'tariftot' varchar(255) NOT NULL,
'etat' varchar(255) NOT NULL,
'date' datetime NOT NULL,
PRIMARY KEY ('id')
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
--
-- Contenu de la table 'articles'
--
INSERT INTO 'articles' ('id', 'refrdv', 'design', 'reffour', 'qtestock', 'fournisseur', 'tarifu', 'tariftot', 'etat', 'date') VALUES
(1, 'rdv1', 'filtre huile actros', 'a00444111222', '5', 'mercedes', '5', '25', 'ok', '2012-10-15 00:00:00'),
(2, 'rdv1', 'test', '054621365', '5', 'iveco', '11', '55', 'ok', '2012-10-15 16:33:44'),
(3, 'rdv1', 'test', '054621365', '5', 'iveco', '11', '55', 'ok', '2012-10-15 16:58:26');
-- --------------------------------------------------------
--
-- Structure de la table 'entree'
--
CREATE TABLE IF NOT EXISTS 'entree' (
'id' int(11) NOT NULL AUTO_INCREMENT,
'refrdv' varchar(255) NOT NULL,
'design' varchar(255) NOT NULL,
'qteajout' varchar(255) NOT NULL,
'immat' varchar(255) NOT NULL,
'date' datetime NOT NULL,
PRIMARY KEY ('id')
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;
--
-- Contenu de la table 'entree'
--
INSERT INTO 'entree' ('id', 'refrdv', 'design', 'qteajout', 'immat', 'date') VALUES
(1, 'rdv1', 'test', '3', '160 dhh', '2012-10-15 16:19:23'),
(8, 'rdv1', 'test', '3', '160 dhh', '2012-10-15 17:00:44');
-- --------------------------------------------------------
--
-- Structure de la table 'sortie'
--
CREATE TABLE IF NOT EXISTS 'sortie' (
'id' int(11) NOT NULL AUTO_INCREMENT,
'refrdv' varchar(255) NOT NULL,
'design' varchar(255) NOT NULL,
'qtesortie' varchar(255) NOT NULL,
'immat' varchar(255) NOT NULL,
'date' datetime NOT NULL,
PRIMARY KEY ('id')
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
--
-- Contenu de la table 'sortie'
--
INSERT INTO 'sortie' ('id', 'refrdv', 'design', 'qtesortie', 'immat', 'date') VALUES
(1, 'rdv1', 'test', '3', '160 dhh', '2012-10-15 16:14:18'),
(2, 'rdv1', 'test', '3', '160 dhh', '2012-10-15 16:18:16'),
(3, 'rdv1', 'test', '3', '160 dhh', '2012-10-15 16:58:49'),
(4, 'rdv1', 'test', '3', '160 dhh', '2012-10-15 17:00:31');
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
formulaire :
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Gestion_stock-sortie</title>
<link href="style.css" rel="stylesheet" type="text/css">
<link href='http://fonts.googleapis.com/css?family=ABeeZee' rel='stylesheet' type='text/css'>
<link href='http://fonts.googleapis.com/css?family=Scada' rel='stylesheet' type='text/css'>
</head>
<body>
<div id="global"><form name="stock" method="post" action="traitementsortie.php">
</br></br>
<span style="font-family: 'ABeeZee', sans-serif; font-size: 22px;">SORTIE DE STOCK</span>
</br>
</br>
</br><span style="font-family: 'Scada', sans-serif;font-size: 16px;">
<label for="refrdv">REF RDV :</label><input type="text" name="refrdv">
</br></br>
<label for="design">Designation :</label><input type="text" name="design">
</br></br>
<label for="qtesortie">Quantitee sortie :</label><input type="text" name="qtesortie">
</br></br>
<label for="immat">Immatriculation :</label><input type="text" name="immat"></span>
</br></br></br>
</br>
</br>
<input type="submit" value="Envoyer" >
</br>
<input type="reset" value="Recommencer" >
</form>
</div>
</body>
</html>
Dites moi si vous voulez plus d'infos et merci de votre aide!
1 réponse
Si j'ai bien compris ton problème, il faut en fait décomposer ton code en deux fonctions :
- une qui gère les entrées (qui transvase un record de la table entree vers la table article)
- une qui gère les sorties (qui transvase un record de la table entree vers la table sortie)
Dans les deux cas tu vas faire des opérations sur deux tables alors que c'est une opération "atomique" (comprendre : les opérations sur les deux tables doivent toutes les deux absolument être faites, sinon un article a "disparu" ou est "apparu" et tes données seront incohérentes). En base de données, ceci se fait au travers d'une transaction. Dans mysql, le moteur par défaut (myisam) ne supporte pas les transaction, mais il est possible de créer ta table avec le moteur innodb.
http://docs.postgresqlfr.org/8.3/sql-createtable.html
Maintenant, je pense qu'il y a une approche bien moins coûteuse en terme de requêtes, qui évite de faire une transaction, et qui te gagne de la place.
Il suffit simplement créer juste une table article à laquelle tu vas ajouter une colonne (appelons là "state") qui stocke une énumération (ça revient à créer un type que tu utiliseras dans ta table pour décrire la colonne "state") pouvant valoir une constante définie dans l'enum (tu définis les noms que tu veux, par exemple : ENTREE, SORTIE, EN_STOCK).
http://docs.postgresqlfr.org/8.3/sql-createtype.html
Autre chose : évite les varchar(255), ça coûte beaucoup de place et il y a sans doute des types sql bien plus adaptés (integer pour les entiers, real pour les réels, timestamp without time zone pour les dates, énumérations comme on vient de le voir pour les "états", etc...).
Bonne chance
- une qui gère les entrées (qui transvase un record de la table entree vers la table article)
- une qui gère les sorties (qui transvase un record de la table entree vers la table sortie)
Dans les deux cas tu vas faire des opérations sur deux tables alors que c'est une opération "atomique" (comprendre : les opérations sur les deux tables doivent toutes les deux absolument être faites, sinon un article a "disparu" ou est "apparu" et tes données seront incohérentes). En base de données, ceci se fait au travers d'une transaction. Dans mysql, le moteur par défaut (myisam) ne supporte pas les transaction, mais il est possible de créer ta table avec le moteur innodb.
http://docs.postgresqlfr.org/8.3/sql-createtable.html
Maintenant, je pense qu'il y a une approche bien moins coûteuse en terme de requêtes, qui évite de faire une transaction, et qui te gagne de la place.
Il suffit simplement créer juste une table article à laquelle tu vas ajouter une colonne (appelons là "state") qui stocke une énumération (ça revient à créer un type que tu utiliseras dans ta table pour décrire la colonne "state") pouvant valoir une constante définie dans l'enum (tu définis les noms que tu veux, par exemple : ENTREE, SORTIE, EN_STOCK).
http://docs.postgresqlfr.org/8.3/sql-createtype.html
Autre chose : évite les varchar(255), ça coûte beaucoup de place et il y a sans doute des types sql bien plus adaptés (integer pour les entiers, real pour les réels, timestamp without time zone pour les dates, énumérations comme on vient de le voir pour les "états", etc...).
Bonne chance