{"id":231597,"date":"2022-12-27T12:11:00","date_gmt":"2022-12-27T09:11:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231597"},"modified":"2022-12-25T22:34:55","modified_gmt":"2022-12-25T19:34:55","slug":"requetes-de-base-de-donnees-pour-mettre-a-jour-rapidement-les-donnees-partie-1","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/requetes-de-base-de-donnees-pour-mettre-a-jour-rapidement-les-donnees-partie-1\/","title":{"rendered":"Requ\u00eates de base de donn\u00e9es pour mettre \u00e0 jour rapidement les donn\u00e9es, partie 1"},"content":{"rendered":"\n<p>Ce n&rsquo;est pas la premi\u00e8re fois que je mentionne cela, mais l&rsquo;un des d\u00e9fis li\u00e9s \u00e0 l&rsquo;\u00e9criture de requ\u00eates directes de base de donn\u00e9es pour mettre \u00e0 jour les informations dans la base de donn\u00e9es WordPress est que vous vous laissez ouvert \u00e0 quelque chose comme :<\/p>\n<blockquote>\n<p>Ouais, mais il y a une API pour faire quelque chose comme \u00e7a.<\/p>\n<\/blockquote>\n<p>Et, dans de nombreux cas, c&rsquo;est vrai. Je suis aussi un grand fan de leur utilisation. Mais il y a des moments o\u00f9 les requ\u00eates de base de donn\u00e9es directes et param\u00e9tr\u00e9es peuvent \u00eatre un choix plus optimal.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159831-61e6fe995df5b.jpg\" data-rel=\"lightbox\" ><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159831-61e6fe995df5b.jpg\" alt=\"Requ\u00eates de base de donn\u00e9es pour mettre \u00e0 jour rapidement les donn\u00e9es, partie 1\" ><\/a><\/p>\n<p>Non, ce n&rsquo;est pas une base de donn\u00e9es, mais ce ne serait pas g\u00e9nial s&rsquo;ils ressemblaient \u00e0 \u00e7a\u00a0? Photo de Tobias Fischer sur Unsplash<\/p>\n<p>Cela d\u00e9pend bien s\u00fbr de l&rsquo;environnement dans lequel vous travaillez et des exigences de votre projet.<\/p>\n<p>Donc, c&rsquo;est encore un autre article qui va \u00eatre une illustration de la fa\u00e7on d&rsquo;utiliser <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/wpdb\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">$wpdb<\/a> pour mettre \u00e0 jour rapidement les informations bas\u00e9es sur les m\u00e9tadonn\u00e9es (sans utiliser quelque chose comme <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_Query\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_Query<\/a> ou <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_Meta_Query\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_Meta_Query<\/a> pour le g\u00e9rer).<\/p>\n<h2>Requ\u00eates de base de donn\u00e9es pour mettre \u00e0 jour rapidement les donn\u00e9es, partie 1<\/h2>\n<p>Je vais diviser cela en deux parties parce que la fonction initiale que je vais vous montrer fait plus d&rsquo;une chose.<\/p>\n<p>Je ne suis pas fan de \u00e7a.<\/p>\n<p>Deuxi\u00e8mement, c&rsquo;est aussi une opportunit\u00e9 de repenser les fonctions pour qu&rsquo;elles se comportent de mani\u00e8re plus orient\u00e9e objet (ce dont <a href=\"https:\/\/tommcfarlin.com\/tag\/object-oriented-programming-in-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">je suis fan<\/a> et que <a href=\"https:\/\/tommcfarlin.com\/object-oriented-programming-using-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">je suis toujours heureux de promouvoir<\/a> ).<\/p>\n<p>Pour l&rsquo;instant, cependant, permettez-moi d&rsquo;exposer le probl\u00e8me qui se pose<\/p>\n<ol>\n<li>J&rsquo;importe un peu d&rsquo;informations \u00e0 partir d&rsquo;une API tierce.<\/li>\n<li>Les informations sont mapp\u00e9es \u00e0 la table wp_posts ainsi qu&rsquo;\u00e0 la table wp_postmeta.<\/li>\n<li>Il y a certaines m\u00e9tadonn\u00e9es qui sont des crit\u00e8res pour dicter le statut d&rsquo;un message. Ou, plus directement, si un \u00e9l\u00e9ment de m\u00e9tadonn\u00e9es est pr\u00e9sent, un article doit avoir son statut d&rsquo;article d\u00e9fini sur brouillon afin qu&rsquo;il n&rsquo;apparaisse pas dans la requ\u00eate principale.<\/li>\n<\/ol>\n<p>Pour r\u00e9soudre ce probl\u00e8me, deux choses doivent se produire\u00a0:<\/p>\n<ol>\n<li>Nous avons besoin des identifiants des postes,<\/li>\n<li>Et nous devons changer le statut des postes.<\/li>\n<\/ol>\n<p>Avant de configurer les requ\u00eates et le reste du code, supposons que la cl\u00e9 m\u00e9ta que nous utilisons s&rsquo;appelle de mani\u00e8re cr\u00e9ative <strong>acme-status<\/strong>. Et avec \u00e7a, commen\u00e7ons.<\/p>\n<h3>1 Saisissez les identifiants de publication avec la m\u00e9ta-cl\u00e9 associ\u00e9e<\/h3>\n<p>Tout d&rsquo;abord, nous allons cr\u00e9er une fonction appel\u00e9e <strong>setInactivePosts.<\/strong> C&rsquo;est plus g\u00e9n\u00e9rique qu&rsquo;il ne le serait si vous travaillez dans un domaine sp\u00e9cifique, mais vous comprenez.<\/p>\n<p>Ensuite, nous allons configurer une requ\u00eate qui <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a4b657f93a5df41274f5b4744975d265#file-00-set-inactive-posts-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">r\u00e9cup\u00e9rera tous les identifiants de publication qui ont cette cl\u00e9 m\u00e9ta sp\u00e9cifique<\/a>\u00a0:<\/p>\n<pre><code>&lt;?php\n\nfunction setInactivePosts()\n{\n    \/\/ First, find the post IDs with an empty acme-status.\n    global $wpdb;\n    $results = $wpdb-&gt;get_results(\n        $wpdb-&gt;prepare(\n            \"\n            SELECT post_id\n            FROM $wpdb-&gt;postmeta\n            WHERE meta_key = %s\n            AND meta_value = ''\n            \",\n            'acme-status') );\n\n  \/\/ More to come...\n<\/code><\/pre>\n<p>Ici, nous avons un tableau de r\u00e9sultats. Mais avant de faire quoi que ce soit, nous devons nous assurer que nous disposons de donn\u00e9es sur lesquelles op\u00e9rer.<\/p>\n<h3>2 Sortir t\u00f4t\u00a0?<\/h3>\n<p>Avant d&rsquo;aller de l&rsquo;avant avec la mise \u00e0 jour des informations, cependant, nous devrions v\u00e9rifier s&rsquo;il y a des r\u00e9sultats. <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a4b657f93a5df41274f5b4744975d265#file-01-return-early-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Et s&rsquo;il n&rsquo;y en a pas ?<\/a><\/p>\n<pre><code>&lt;?php\n\n\/\/ See previous gist.\n\n\/\/ If there aren't any results, there's nothing to do.\nif (0 === count($results)) {\n    return;\n}\n\n\/\/ More to come...<\/code><\/pre>\n<p>Ensuite, nous pouvons nous esquiver.<\/p>\n<h3>3 Mettre \u00e0 jour le statut de la publication<\/h3>\n<p>Mais s&rsquo;il y a des r\u00e9sultats, nous devrions les parcourir et mettre \u00e0 jour <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a4b657f93a5df41274f5b4744975d265#file-02-update-post-status-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">leur statut de publication<\/a>\u00a0:<\/p>\n<pre><code>&lt;?php\n\n\/\/ See previous gist.\n\n\/\/ Otherwise, set the post_status of the specified post IDs to 'draft'.\nforeach ($results as $result) {\n    $wpdb-&gt;get_results(\n        $wpdb-&gt;prepare(\n            \"\n            UPDATE $wpdb-&gt;posts\n            SET post_status = %s\n            WHERE ID = %d\n            \",\n            'draft',\n            (int) ($result-&gt;post_id)) );\n}<\/code><\/pre>\n<p>Alors \u00e0 quoi \u00e7a ressemble tous ensemble ?<\/p>\n<h3>4 Tous ensemble<\/h3>\n<p>Lorsque nous assemblons cette fonction plus grande que n\u00e9cessaire, voici <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a4b657f93a5df41274f5b4744975d265#file-03-set-inactive-posts-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ce que vous voyez<\/a>\u00a0:<\/p>\n<pre><code>&lt;?php\n\nfunction setInactivePosts()\n{\n    \/\/ First, find the post IDs with an empty acme-status.\n    global $wpdb;\n    $results = $wpdb-&gt;get_results(\n        $wpdb-&gt;prepare(\n            \"\n            SELECT post_id\n            FROM $wpdb-&gt;postmeta\n            WHERE meta_key = %s\n            AND meta_value = ''\n            \",\n            'acme-status') );\n\n    \/\/ If there aren't any results, there's nothing to do.\n    if (0 === count($results)) {\n        return;\n    }\n\n    \/\/ Otherwise, set the post_status of the specified post IDs to 'draft'.\n    foreach ($results as $result) {\n        $wpdb-&gt;get_results(\n            $wpdb-&gt;prepare(\n                \"\n                UPDATE $wpdb-&gt;posts\n                SET post_status = %s\n                WHERE ID = %d\n                \",\n                'draft',\n                (int) ($result-&gt;post_id)) );\n    }\n}<\/code><\/pre>\n<p>Mais dans le prochain article, nous r\u00e9organiserons un peu cela pour le rendre plus orient\u00e9 objet.<\/p>\n<h3>Une note pour les administrateurs de base de donn\u00e9es<\/h3>\n<p>Pour ceux d&rsquo;entre vous qui connaissent bien SQL-fu, vous savez que cela peut probablement \u00eatre r\u00e9solu en une seule requ\u00eate. cependant, le but de ce message et du message qui suit est double\u00a0:<\/p>\n<ol>\n<li>Pour montrer comment utiliser $wpdb pour r\u00e9aliser quelque chose rapidement,<\/li>\n<li>Montrer comment d\u00e9composer une m\u00e9thode proc\u00e9durale de faire quelque chose en une m\u00e9thode orient\u00e9e objet de faire quelque chose.<\/li>\n<\/ol>\n<p>Cela dit, merci pour toutes les questions. \ud83d\udc4d\ud83c\udffb<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ceci est encore un autre article qui illustrera comment utiliser $ wpdb pour mettre \u00e0 jour rapidement les informations \u00e0 l&rsquo;aide de requ\u00eates directes dans la base de donn\u00e9es.<\/p>\n","protected":false},"author":1,"featured_media":237054,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[915,893,717,832,841,862],"tags":[1167],"class_list":["post-231597","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-autre","category-code-2","category-developpeur","category-guide-pour-les-debutants","category-tutoriels","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231597","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=231597"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231597\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/237054"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=231597"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=231597"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=231597"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}