{"id":243,"date":"2014-02-28T15:26:18","date_gmt":"2014-02-28T15:26:18","guid":{"rendered":"https:\/\/blogs.ua.es\/jpm33\/?p=243"},"modified":"2014-02-28T15:26:18","modified_gmt":"2014-02-28T15:26:18","slug":"parametrizar-consulta-en-mysql-usando-variables","status":"publish","type":"post","link":"https:\/\/blogs.ua.es\/jpm33\/2014\/02\/28\/parametrizar-consulta-en-mysql-usando-variables\/","title":{"rendered":"Parametrizar consulta en MySQL usando @variables"},"content":{"rendered":"<h1>Introducci\u00f3n<\/h1>\n<p>Hace poco en un proyecto personal he empezado a usar variables en mis consultas SQL para probarlas en mi cliente HeidiSQL. De esto modo puedo verificar el funcionamiento de las mismas como las construye mi framewoork codeigniter.<\/p>\n<p>Por poner un ejemplo, en PHP plano se escribir\u00eda algo as\u00ed:<\/p>\n<pre>$select = 'select * from cosas where precio &gt; ', ($miprecio + $parametro) ' and precio &lt; ', ($miprecio * 10) ;.<\/pre>\n<p>Pero claro, lo ideal es poder usar en MySQL una construcci\u00f3n con el mismo aspecto, \u00bfc\u00f3mo? Usando las variables que nos ofrece en SQL.<\/p>\n<h1>Ejemplos<\/h1>\n<p>Supongamos una tabla de viviendas con su id, nombre y precio de mercado como la siguiente:<\/p>\n<pre><code>select id, nombre, precio_de_venta from kaza_viviendas<\/code><\/pre>\n<table>\n<thead>\n<tr>\n<th class=\"col0\">id<\/th>\n<th class=\"col1\">nombre<\/th>\n<th class=\"col2\">precio_de_venta<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"col0\">12<\/td>\n<td class=\"col1\">Villa Atlas<\/td>\n<td class=\"col2\">1470000<\/td>\n<\/tr>\n<tr>\n<td class=\"col0\">10<\/td>\n<td class=\"col1\">Villa Chronos<\/td>\n<td class=\"col2\">1350000<\/td>\n<\/tr>\n<tr>\n<td class=\"col0\">11<\/td>\n<td class=\"col1\">Villa Hermes<\/td>\n<td class=\"col2\">780000<\/td>\n<\/tr>\n<tr>\n<td class=\"col0\">6<\/td>\n<td class=\"col1\">Villa Marfil<\/td>\n<td class=\"col2\">1300000<\/td>\n<\/tr>\n<tr>\n<td class=\"col0\">8<\/td>\n<td class=\"col1\">Villa Eos<\/td>\n<td class=\"col2\">850000<\/td>\n<\/tr>\n<tr>\n<td class=\"col0\">9<\/td>\n<td class=\"col1\">Villa Pegasus<\/td>\n<td class=\"col2\">670000<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Si queremos el precio m\u00e1s bonito y usando otro nombre:<\/p>\n<pre><code>select id, nombre, format(precio_de_venta, 2) as precio from viviendas \r\n<\/code><\/pre>\n<table>\n<thead>\n<tr>\n<th class=\"col0\">id<\/th>\n<th class=\"col1\">nombre<\/th>\n<th class=\"col2\">precio<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"col0\">12<\/td>\n<td class=\"col1\">Villa Atlas<\/td>\n<td class=\"col2\">1,470,000.00<\/td>\n<\/tr>\n<tr>\n<td class=\"col0\">10<\/td>\n<td class=\"col1\">Villa Chronos<\/td>\n<td class=\"col2\">1,350,000.00<\/td>\n<\/tr>\n<tr>\n<td class=\"col0\">11<\/td>\n<td class=\"col1\">Villa Hermes<\/td>\n<td class=\"col2\">780,000.00<\/td>\n<\/tr>\n<tr>\n<td class=\"col0\">6<\/td>\n<td class=\"col1\">Villa Marfil<\/td>\n<td class=\"col2\">1,300,000.00<\/td>\n<\/tr>\n<tr>\n<td class=\"col0\">8<\/td>\n<td class=\"col1\">Villa Eos<\/td>\n<td class=\"col2\">850,000.00<\/td>\n<\/tr>\n<tr>\n<td class=\"col0\">9<\/td>\n<td class=\"col1\">Villa Pegasus<\/td>\n<td class=\"col2\">670,000.00<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>A continuaci\u00f3n, vamos a crear dos par\u00e1metros &#8220;horquilla&#8221; y &#8220;precio_referencia&#8221;. El primero establece un l\u00edmite sobre el que buscar precio &#8220;similares&#8221; al dado por &#8220;precio_referencia&#8221;:<\/p>\n<pre><code>set @precio_referencia=1470000;\r\nset @horquilla=25000;\r\nselect id, nombre, format(precio_de_venta, 2) as recio\r\nfrom viviendas\r\nwhere precio_de_venta &gt;= (@precio_referencia - @horquilla)\r\n  and precio_de_venta &lt;= (@precio_referencia + @horquilla);\r\n<\/code><\/pre>\n<p>Como vemos s\u00f3lo nos devuelve una. Pero para generar y probar una lista de viviendas similares con este u otro criterio resulta muy \u00fatil y r\u00e1pido<\/p>\n<table>\n<thead>\n<tr>\n<th class=\"col0\">id<\/th>\n<th class=\"col1\">nombre<\/th>\n<th class=\"col2\">recio<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"col0\">12<\/td>\n<td class=\"col1\">Villa Atlas<\/td>\n<td class=\"col2\">1,470,000.00<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Estos ejemplos son muy sencillo y tontos, pero creo que ilustran a grandes rasgos lo que quiero decir, adem\u00e1s estoy seguro que para construir consultas m\u00e1s complejos con mayor cantidad de cruzas y condiciones podr\u00eda ser de gran ayuda.<\/p>\n<h1>Conclusi\u00f3n<\/h1>\n<p>En desarrollo personalmente no me gusta usar variables de MySQL, aunque con ejemplos como el anterior si que veo muy claro lo que facilita la depuraci\u00f3n del SQL y ayuda a la hora de construir consultas muy complejas con muchos datos cruzas y poder probar diferentes casos.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introducci\u00f3n Hace poco en un proyecto personal he empezado a usar variables en mis consultas SQL para probarlas en mi cliente HeidiSQL. De esto modo puedo verificar el funcionamiento de las mismas como las construye mi framewoork codeigniter. Por poner &hellip; <a href=\"https:\/\/blogs.ua.es\/jpm33\/2014\/02\/28\/parametrizar-consulta-en-mysql-usando-variables\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":3080,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[135,374,236731],"tags":[236718,1839,23],"class_list":["post-243","post","type-post","status-publish","format-standard","hentry","category-linux","category-programacion","category-web","tag-programacion-2","tag-sql","tag-web"],"_links":{"self":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts\/243","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/users\/3080"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/comments?post=243"}],"version-history":[{"count":3,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts\/243\/revisions"}],"predecessor-version":[{"id":246,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts\/243\/revisions\/246"}],"wp:attachment":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/media?parent=243"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/categories?post=243"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/tags?post=243"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}