{"id":28,"date":"2006-06-09T17:32:38","date_gmt":"2006-06-09T17:32:38","guid":{"rendered":"http:\/\/www.olivierdoucet.info\/wordpress\/?p=28"},"modified":"2006-06-09T17:32:38","modified_gmt":"2006-06-09T17:32:38","slug":"22-astuce-mysql-nombre-de-lignes-retournees-sans-clause-limit","status":"publish","type":"post","link":"https:\/\/www.olivierdoucet.info\/blog\/2006\/06\/09\/22-astuce-mysql-nombre-de-lignes-retournees-sans-clause-limit\/","title":{"rendered":"Astuce MySQL : nombre de lignes retourn\u00e9es sans clause LIMIT"},"content":{"rendered":"<p>Une petite astuce que je viens de d\u00e9couvrir concernant MySQL. Imaginez que vous avez une requete de type SELECT qui est sens\u00e9 vous retourner des centaines de lignes. Pour afficher ca correctement \u00e0 l&rsquo;utilisateur, vous souhaitez limiter le nombre de r\u00e9sultats retourn\u00e9s \u00e0 50 par exemple. Vous allez donc faire quelque chose comme __SELECT * FROM matable WHERE (&#8230;) LIMIT 0,50__ Pour les pages suivantes, la requete sera la m\u00eame avec un __LIMIT 50,50__    puis __LIMIT 100,50__ etc. Le soucis, c&rsquo;est pour savoir le nombre de pages possible justement. EN clair, combien MySQL aurait retourn\u00e9 de lignes sans la clause LIMIT. Jusqu&rsquo;\u00e0 maintenant, il fallait faire deux fois la requete (ou instaurer un break quand on bouclait sur les r\u00e9sultats). Quelle perte de temps (et de bande passante entre votre serveur web et votre serveur SQL, si vous ne voulez afficher que 10 lignes alors que le r\u00e9sultat en retourne un million) ! Il existe une astuce dans MySQL pour \u00e9viter de devoir refaire deux fois la requete (et donc \u00e9conomiser de pr\u00e9cieuses secondes quand vous utilisez des jointures, et\/ou cherchez dans une table immense).<br \/>\n<!--more--><br \/>\nComment faire : Faites votre premi\u00e8re requete en incluant l&rsquo;option \u00a0\u00bb SQL_CALC_FOUND_ROWS\u00a0\u00bb :  mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name      -> WHERE id > 100 LIMIT 10; Vous avez donc vos r\u00e9sultats pour votre premi\u00e8re page. Pour r\u00e9cup\u00e9rer le nombre de ligne total, executez ensuite :  mysql> SELECT FOUND_ROWS(); Et voil\u00e0 le travail \ud83d\ude09 Cette deuxieme requete sera pratiquement instantan\u00e9e, puisque MySQL aura gard\u00e9 la valeur de c\u00f4t\u00e9 rien que pour vous \ud83d\ude09 Source : [|http:\/\/dev.mysql.com\/doc\/refman\/4.1\/en\/information-functions.html#id3147821|en] \u00a0\u00bbNote: ceci ne marche qu&rsquo;\u00e0 partir de MySQL 4.1\u00a0\u00bb<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Une petite astuce que je viens de d\u00e9couvrir concernant MySQL. Imaginez que vous avez une requete de type SELECT qui est sens\u00e9 vous retourner des centaines de lignes. Pour afficher ca correctement \u00e0 l&rsquo;utilisateur, vous souhaitez limiter le nombre de r\u00e9sultats retourn\u00e9s \u00e0 50 par exemple. Vous allez donc faire quelque chose comme __SELECT * FROM matable WHERE (&#8230;) LIMIT 0,50__ Pour les pages suivantes, la requete sera la m\u00eame avec un __LIMIT 50,50__    puis __LIMIT 100,50__ etc. Le soucis, c&rsquo;est pour savoir le nombre de pages possible justement. EN clair, combien MySQL aurait retourn\u00e9 de lignes sans la clause LIMIT. Jusqu&rsquo;\u00e0 maintenant, il fallait faire deux fois la requete (ou instaurer un break quand on bouclait sur les r\u00e9sultats). Quelle perte de temps (et de bande passante entre votre serveur web et votre serveur SQL, si vous ne voulez afficher que 10 lignes alors que le r\u00e9sultat en retourne un million) ! Il existe une astuce dans MySQL pour \u00e9viter de devoir refaire deux fois la requete (et donc \u00e9conomiser de pr\u00e9cieuses secondes quand vous utilisez des jointures, et\/ou cherchez dans une table immense).<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[36],"class_list":["post-28","post","type-post","status-publish","format-standard","hentry","category-php-sql","tag-mysql"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Astuce MySQL : nombre de lignes retourn\u00e9es sans clause LIMIT - My thoughts<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.olivierdoucet.info\/blog\/2006\/06\/09\/22-astuce-mysql-nombre-de-lignes-retournees-sans-clause-limit\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Astuce MySQL : nombre de lignes retourn\u00e9es sans clause LIMIT - My thoughts\" \/>\n<meta property=\"og:description\" content=\"Une petite astuce que je viens de d\u00e9couvrir concernant MySQL. Imaginez que vous avez une requete de type SELECT qui est sens\u00e9 vous retourner des centaines de lignes. Pour afficher ca correctement \u00e0 l&#039;utilisateur, vous souhaitez limiter le nombre de r\u00e9sultats retourn\u00e9s \u00e0 50 par exemple. Vous allez donc faire quelque chose comme __SELECT * FROM matable WHERE (...) LIMIT 0,50__ Pour les pages suivantes, la requete sera la m\u00eame avec un __LIMIT 50,50__  puis __LIMIT 100,50__ etc. Le soucis, c&#039;est pour savoir le nombre de pages possible justement. EN clair, combien MySQL aurait retourn\u00e9 de lignes sans la clause LIMIT. Jusqu&#039;\u00e0 maintenant, il fallait faire deux fois la requete (ou instaurer un break quand on bouclait sur les r\u00e9sultats). Quelle perte de temps (et de bande passante entre votre serveur web et votre serveur SQL, si vous ne voulez afficher que 10 lignes alors que le r\u00e9sultat en retourne un million) ! Il existe une astuce dans MySQL pour \u00e9viter de devoir refaire deux fois la requete (et donc \u00e9conomiser de pr\u00e9cieuses secondes quand vous utilisez des jointures, et\/ou cherchez dans une table immense).\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.olivierdoucet.info\/blog\/2006\/06\/09\/22-astuce-mysql-nombre-de-lignes-retournees-sans-clause-limit\/\" \/>\n<meta property=\"og:site_name\" content=\"My thoughts\" \/>\n<meta property=\"article:published_time\" content=\"2006-06-09T17:32:38+00:00\" \/>\n<meta name=\"author\" content=\"Olivierd\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@odoucet\" \/>\n<meta name=\"twitter:site\" content=\"@odoucet\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Olivierd\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/2006\/06\/09\/22-astuce-mysql-nombre-de-lignes-retournees-sans-clause-limit\/\",\"url\":\"https:\/\/www.olivierdoucet.info\/blog\/2006\/06\/09\/22-astuce-mysql-nombre-de-lignes-retournees-sans-clause-limit\/\",\"name\":\"Astuce MySQL : nombre de lignes retourn\u00e9es sans clause LIMIT - My thoughts\",\"isPartOf\":{\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/#website\"},\"datePublished\":\"2006-06-09T17:32:38+00:00\",\"author\":{\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/#\/schema\/person\/308d5cde55f1ba886ebe73450b54c403\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/2006\/06\/09\/22-astuce-mysql-nombre-de-lignes-retournees-sans-clause-limit\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.olivierdoucet.info\/blog\/2006\/06\/09\/22-astuce-mysql-nombre-de-lignes-retournees-sans-clause-limit\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/2006\/06\/09\/22-astuce-mysql-nombre-de-lignes-retournees-sans-clause-limit\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.olivierdoucet.info\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Astuce MySQL : nombre de lignes retourn\u00e9es sans clause LIMIT\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/#website\",\"url\":\"https:\/\/www.olivierdoucet.info\/blog\/\",\"name\":\"My thoughts\",\"description\":\"En fran\u00e7ais and in english :)\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.olivierdoucet.info\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/#\/schema\/person\/308d5cde55f1ba886ebe73450b54c403\",\"name\":\"Olivierd\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/?s=96&d=mm&r=g\",\"caption\":\"Olivierd\"},\"sameAs\":[\"http:\/\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Astuce MySQL : nombre de lignes retourn\u00e9es sans clause LIMIT - My thoughts","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.olivierdoucet.info\/blog\/2006\/06\/09\/22-astuce-mysql-nombre-de-lignes-retournees-sans-clause-limit\/","og_locale":"fr_FR","og_type":"article","og_title":"Astuce MySQL : nombre de lignes retourn\u00e9es sans clause LIMIT - My thoughts","og_description":"Une petite astuce que je viens de d\u00e9couvrir concernant MySQL. Imaginez que vous avez une requete de type SELECT qui est sens\u00e9 vous retourner des centaines de lignes. Pour afficher ca correctement \u00e0 l'utilisateur, vous souhaitez limiter le nombre de r\u00e9sultats retourn\u00e9s \u00e0 50 par exemple. Vous allez donc faire quelque chose comme __SELECT * FROM matable WHERE (...) LIMIT 0,50__ Pour les pages suivantes, la requete sera la m\u00eame avec un __LIMIT 50,50__  puis __LIMIT 100,50__ etc. Le soucis, c'est pour savoir le nombre de pages possible justement. EN clair, combien MySQL aurait retourn\u00e9 de lignes sans la clause LIMIT. Jusqu'\u00e0 maintenant, il fallait faire deux fois la requete (ou instaurer un break quand on bouclait sur les r\u00e9sultats). Quelle perte de temps (et de bande passante entre votre serveur web et votre serveur SQL, si vous ne voulez afficher que 10 lignes alors que le r\u00e9sultat en retourne un million) ! Il existe une astuce dans MySQL pour \u00e9viter de devoir refaire deux fois la requete (et donc \u00e9conomiser de pr\u00e9cieuses secondes quand vous utilisez des jointures, et\/ou cherchez dans une table immense).","og_url":"https:\/\/www.olivierdoucet.info\/blog\/2006\/06\/09\/22-astuce-mysql-nombre-de-lignes-retournees-sans-clause-limit\/","og_site_name":"My thoughts","article_published_time":"2006-06-09T17:32:38+00:00","author":"Olivierd","twitter_card":"summary_large_image","twitter_creator":"@odoucet","twitter_site":"@odoucet","twitter_misc":{"\u00c9crit par":"Olivierd","Dur\u00e9e de lecture estim\u00e9e":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.olivierdoucet.info\/blog\/2006\/06\/09\/22-astuce-mysql-nombre-de-lignes-retournees-sans-clause-limit\/","url":"https:\/\/www.olivierdoucet.info\/blog\/2006\/06\/09\/22-astuce-mysql-nombre-de-lignes-retournees-sans-clause-limit\/","name":"Astuce MySQL : nombre de lignes retourn\u00e9es sans clause LIMIT - My thoughts","isPartOf":{"@id":"https:\/\/www.olivierdoucet.info\/blog\/#website"},"datePublished":"2006-06-09T17:32:38+00:00","author":{"@id":"https:\/\/www.olivierdoucet.info\/blog\/#\/schema\/person\/308d5cde55f1ba886ebe73450b54c403"},"breadcrumb":{"@id":"https:\/\/www.olivierdoucet.info\/blog\/2006\/06\/09\/22-astuce-mysql-nombre-de-lignes-retournees-sans-clause-limit\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.olivierdoucet.info\/blog\/2006\/06\/09\/22-astuce-mysql-nombre-de-lignes-retournees-sans-clause-limit\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.olivierdoucet.info\/blog\/2006\/06\/09\/22-astuce-mysql-nombre-de-lignes-retournees-sans-clause-limit\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.olivierdoucet.info\/blog\/"},{"@type":"ListItem","position":2,"name":"Astuce MySQL : nombre de lignes retourn\u00e9es sans clause LIMIT"}]},{"@type":"WebSite","@id":"https:\/\/www.olivierdoucet.info\/blog\/#website","url":"https:\/\/www.olivierdoucet.info\/blog\/","name":"My thoughts","description":"En fran\u00e7ais and in english :)","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.olivierdoucet.info\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"https:\/\/www.olivierdoucet.info\/blog\/#\/schema\/person\/308d5cde55f1ba886ebe73450b54c403","name":"Olivierd","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.olivierdoucet.info\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/?s=96&d=mm&r=g","caption":"Olivierd"},"sameAs":["http:\/\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/posts\/28","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/comments?post=28"}],"version-history":[{"count":0,"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/posts\/28\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/media?parent=28"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/categories?post=28"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/tags?post=28"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}