
{"id":381,"date":"2009-01-07T00:39:25","date_gmt":"2009-01-06T23:39:25","guid":{"rendered":"http:\/\/dasini.net\/blog\/?p=381"},"modified":"2009-01-13T16:12:00","modified_gmt":"2009-01-13T15:12:00","slug":"mysql-5-les-vues-part-67","status":"publish","type":"post","link":"https:\/\/dasini.net\/blog\/2009\/01\/07\/mysql-5-les-vues-part-67\/","title":{"rendered":"MySQL 5 : Les vues &#8212; (part 6\/7)"},"content":{"rendered":"<p><!-- \t \t --><\/p>\n<address>(<a title=\"MySQL 5 : Les vues -- (part 5\/7)\" href=\"http:\/\/dasini.net\/blog\/2008\/12\/19\/mysql-5-les-vues-part-57\/\">&lt;- pr\u00e9c\u00e9dent<\/a>)<\/address>\n<p><!-- \t \t --><\/p>\n<h3>Modifier automatiquement des donn\u00e9es s\u00e9lectionn\u00e9es<\/h3>\n<p>Pour ce troisi\u00e8me exemple, nous allons nous int\u00e9resser au sch\u00e9ma (l\u00e0 encore tr\u00e8s simplifi\u00e9) d&rsquo;une application qui permet de vendre des produits en France et au Royaume-Uni, en euro, livre et dollar. Cette application poss\u00e8de une table <strong>produit<\/strong>, qui contient le produit (son identifiant) et son prix hors taxe en euro.<\/p>\n<p>Structure de la table produit:<\/p>\n<pre>CREATE TABLE produit (\r\n  id_produit mediumint(8) unsigned NOT NULL auto_increment,\r\n  prix_ht decimal(6,2) default NULL,\r\n  PRIMARY KEY  (id_produit)\r\n)<\/pre>\n<p>Nous disposons \u00e9galement des tables <strong>devise<\/strong> et <strong>tva<\/strong> qui g\u00e8rent respectivement le taux de change des devises et la TVA de diff\u00e9rents pays.<\/p>\n<p><!-- \t \t --><\/p>\n<p>Tables devise et tva:<\/p>\n<pre>CREATE TABLE devise (\r\n  devise enum('Euro', 'Dollar', 'Livre') NOT NULL,\r\n  valeur decimal(6,5) default NULL,\r\n  PRIMARY KEY  (devise)\r\n);\r\n\r\nINSERT INTO devise VALUES ('Livre',0.66017);\r\nINSERT INTO devise VALUES ('Dollar',1.29852);\r\nINSERT INTO devise VALUES ('Euro',1);\r\n\r\nCREATE TABLE tva (\r\n  pays enum('France', 'Royaume-Uni') NOT NULL,\r\n  normal decimal(3,1) default NULL,\r\n  reduit decimal(3,1) default NULL,\r\n  PRIMARY KEY  (pays)\r\n);\r\n\r\nINSERT INTO tva VALUES ('Royaume-Uni',17.5,5.0);\r\nINSERT INTO tva VALUES ('France',19.6,5.5);<\/pre>\n<p><!-- \t \t --><\/p>\n<p>Le besoin est le suivant : disposer simplement des prix TTC pour chaque pays.<\/p>\n<p>On va donc cr\u00e9er deux vues par pays qui nous permettrons de disposer des prix TTC en fonction de la devise.<\/p>\n<p>La vue <strong>produit_france<\/strong>, contient les produits, le prix TTC et le prix TTC r\u00e9duit qui correspond \u00e0 l&rsquo;ajout de la TVA r\u00e9duite. Les prix sont en euros.<\/p>\n<p><!-- \t \t --><\/p>\n<p>Vue produit_france :<\/p>\n<pre>CREATE VIEW 'produit_france' AS\r\nSELECT 'produit'.'id_produit' AS 'produit',\r\nround((((('produit'.'prix_ht' * 'tva'.'normal') \/ 100) + 'produit'.'prix_ht')\r\n     * 'devise'.'valeur'),2) AS 'Prix_ttc_\u20ac',\r\nround((((('produit'.'prix_ht'* 'tva'.'reduit') \/ 100) + 'produit'.'prix_ht')\r\n     * 'devise'.'valeur'),2) AS 'Prix_ttc_reduit_\u20ac'\r\nFROM (('produit' join 'tva') join 'devise')\r\nWHERE (('tva'.'pays' = 'France') and ('devise'.'devise' = 'Euro'));<\/pre>\n<p>Certains clients pr\u00e9f\u00e9rant la monnaie de l&rsquo;oncle Sam, une deuxi\u00e8me vue, <strong>produit_france_dollar<\/strong>, est n\u00e9cessaire pour avoir les prix en dollar.<\/p>\n<p><!-- \t \t --><\/p>\n<p>Vue produit_france_dollar:<\/p>\n<pre>CREATE VIEW 'produit_france_dollar' AS\r\nSELECT 'produit'.'id_produit' AS 'produit',\r\nround((((('produit'.'prix_ht' * 'tva'.'normal') \/ 100) + 'produit'.'prix_ht')\r\n     * 'devise'.'valeur'),2) AS 'Prix_ttc_$',\r\nround((((('produit'.'prix_ht'* 'tva'.'reduit') \/ 100) + 'produit'.'prix_ht')\r\n     * 'devise'.'valeur'),2) AS 'Prix_ttc_reduit_$'\r\nFROM (('produit' join 'tva') join 'devise')\r\nWHERE (('tva'.'pays' = 'France') and ('devise'.'devise' = 'Dollar'));<\/pre>\n<p><!-- \t \t --><\/p>\n<p>M\u00eame principe pour le Royaume-Uni :<\/p>\n<pre>CREATE VIEW 'produit_royaume_uni' AS\r\nSELECT 'produit'.'id_produit' AS 'produit',\r\nround((((('produit'.'prix_ht' * 'tva'.'normal') \/ 100) + 'produit'.'prix_ht')\r\n     * 'devise'.'valeur'),2) AS 'Net_price_\u00a3',\r\nround((((('produit'.'prix_ht'* 'tva'.'reduit') \/ 100) + 'produit'.'prix_ht')\r\n     * 'devise'.'valeur'),2) AS 'reduced_ Net_price_\u00a3'\r\nFROM (('produit' join 'tva') join 'devise')\r\nWHERE (('tva'.'pays' = 'Royaume-Uni') and ('devise'.'devise' = 'Livre'));<\/pre>\n<p><!-- \t \t --><\/p>\n<p>Avec les prix en dollar :<\/p>\n<pre>CREATE VIEW 'produit_royaume_uni_dollar' AS\r\nSELECT 'produit'.'id_produit' AS 'produit',\r\nround((((('produit'.'prix_ht' * 'tva'.'normal') \/ 100) + 'produit'.'prix_ht')\r\n     * 'devise'.'valeur'),2) AS 'Net_price_$',\r\nround((((('produit'.'prix_ht'* 'tva'.'reduit') \/ 100) + 'produit'.'prix_ht')\r\n     * 'devise'.'valeur'),2) AS 'reduced_ Net_price_$'\r\nFROM (('produit' join 'tva') join 'devise')\r\n\r\nWHERE (('tva'.'pays' = 'Royaume-Uni') and ('devise'.'devise' = 'Dollar'));<\/pre>\n<p><!-- \t \t --><\/p>\n<p><a title=\"MySQL 5 : Les vues -- (part 7\/7)\" href=\"http:\/\/dasini.net\/blog\/2009\/01\/13\/mysql-5-les-vues-part-77\/\"><em>(\u00e0 suivre\u2026 Conserver la structure d&rsquo;une table)<\/em><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Modifier automatiquement des donn\u00e9es s\u00e9lectionn\u00e9es<\/p>\n<p>Pour ce troisi\u00e8me exemple, nous allons nous int\u00e9resser au sch\u00e9ma (l\u00e0 encore tr\u00e8s simplifi\u00e9) d&rsquo;une application qui permet de vendre des produits en France et au Royaume-Uni, en euro, livre et dollar. Cette application poss\u00e8de une table produit, qui contient le produit (son identifiant) et son prix hors taxe en euro.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"footnotes":""},"categories":[8],"tags":[82,241,12,58],"class_list":["post-381","post","type-post","status-publish","format-standard","hentry","category-mysql","tag-exemples-vues","tag-mysql","tag-mysql-5","tag-vue"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9LfWW-69","jetpack-related-posts":[{"id":403,"url":"https:\/\/dasini.net\/blog\/2009\/01\/13\/mysql-5-les-vues-part-77\/","url_meta":{"origin":381,"position":0},"title":"MySQL 5 : Les vues &#8212; (part 7\/7)","author":"Olivier DASINI","date":"13 janvier 2009","format":false,"excerpt":"Conserver la structure d'une table si elle doit \u00eatre modifi\u00e9e La probl\u00e9matique est de mettre \u00e0 jour le sch\u00e9ma de l'application en changeant la structure de certaines tables.","rel":"","context":"Dans &quot;MySQL&quot;","block_context":{"text":"MySQL","link":"https:\/\/dasini.net\/blog\/category\/mysql\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":350,"url":"https:\/\/dasini.net\/blog\/2008\/12\/19\/mysql-5-les-vues-part-57\/","url_meta":{"origin":381,"position":1},"title":"MySQL 5 : Les vues &#8212; (part 5\/7)","author":"Olivier DASINI","date":"19 d\u00e9cembre 2008","format":false,"excerpt":"Masquer la complexit\u00e9 du sch\u00e9ma L'\u00e9quipe de d\u00e9veloppement doit \u00e9crire un moteur de recherche pour une application de commerce \u00e9lectronique. Voici un extrait des tables de la base de donn\u00e9es impliqu\u00e9es dans la recherche des produits du site.","rel":"","context":"Dans &quot;MySQL&quot;","block_context":{"text":"MySQL","link":"https:\/\/dasini.net\/blog\/category\/mysql\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":304,"url":"https:\/\/dasini.net\/blog\/2008\/12\/08\/mysql-5-les-vues-part-47\/","url_meta":{"origin":381,"position":2},"title":"MySQL 5 : Les vues &#8212; (part 4\/7)","author":"Olivier DASINI","date":"8 d\u00e9cembre 2008","format":false,"excerpt":"Voici quelques exemples pratiques tr\u00e8s simples pour illustrer les diff\u00e9rents besoins auxquels peuvent r\u00e9pondre les vues. On aura ici, une vue administrateur de base de donn\u00e9es. Les objets cr\u00e9\u00e9s ne seront pas utilis\u00e9s directement par les utilisateurs mais aux travers d'une application","rel":"","context":"Dans &quot;MySQL&quot;","block_context":{"text":"MySQL","link":"https:\/\/dasini.net\/blog\/category\/mysql\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":237,"url":"https:\/\/dasini.net\/blog\/2008\/11\/28\/les-nouveautes-de-mysql-51-part-15\/","url_meta":{"origin":381,"position":3},"title":"Les nouveaut\u00e9s de MySQL 5.1 &#8212; (part 1\/5)","author":"Olivier DASINI","date":"28 novembre 2008","format":false,"excerpt":"Que de chemin parcouru depuis ce 5 juillet 1999, date de lancement de MySQL 3.23.0. En plus des objectifs de simplicit\u00e9 d'administration, de hautes performances et de fiabilit\u00e9, se sont greff\u00e9es, au fur et \u00e0 mesure, les fonctionnalit\u00e9s les plus demand\u00e9es par les utilisateurs. La nouvelle version du SGBDR open-source\u2026","rel":"","context":"Dans &quot;MySQL&quot;","block_context":{"text":"MySQL","link":"https:\/\/dasini.net\/blog\/category\/mysql\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":56,"url":"https:\/\/dasini.net\/blog\/2008\/11\/02\/auto_increment-differences-myisam-innodb\/","url_meta":{"origin":381,"position":4},"title":"AUTO_INCREMENT: Diff\u00e9rences MyISAM &#8211; InnoDB","author":"Olivier DASINI","date":"2 novembre 2008","format":false,"excerpt":"La clause, AUTO_INCREMENT, permet \u00e0 MySQL de g\u00e9n\u00e9rer un entier unique pour tout nouvel enregistrement d'une table. Cette clause ne peut se mettre que sur les champs de type entier, index\u00e9 et non nul. Elle est donc souvent utilis\u00e9e comme cl\u00e9 primaire. Cependant, sont comportement n'est pas tout \u00e0 fait\u2026","rel":"","context":"Dans &quot;MySQL&quot;","block_context":{"text":"MySQL","link":"https:\/\/dasini.net\/blog\/category\/mysql\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":622,"url":"https:\/\/dasini.net\/blog\/2009\/06\/16\/le-programmateur-devenements-event-scheduler-part-46\/","url_meta":{"origin":381,"position":5},"title":"Le programmateur d&rsquo;\u00e9v\u00e9nements ( Event Scheduler ) (part 4\/6)","author":"Olivier DASINI","date":"16 juin 2009","format":false,"excerpt":"Insertions de donn\u00e9es dans une table, toutes les 30 secondes mysql> SELECT * FROM _event.insert_event ; mysql> DELIMITER \u20ac\u20ac mysql> CREATE EVENT `_event`.`second_event` ON SCHEDULE EVERY 30 SECOND DO BEGIN \/*selectionne la val maximale de la colonne fois. Si elle vaut NULL alors retourne la valeur 0 dans la variable\u2026","rel":"","context":"Dans &quot;MySQL&quot;","block_context":{"text":"MySQL","link":"https:\/\/dasini.net\/blog\/category\/mysql\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/381","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/comments?post=381"}],"version-history":[{"count":12,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/381\/revisions"}],"predecessor-version":[{"id":393,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/381\/revisions\/393"}],"wp:attachment":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/media?parent=381"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/categories?post=381"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/tags?post=381"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}