🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #6309

Re: Consulta en mysql

#6309
From: sio2
Date: Mon, 14 Jul 2003 09:26
67 lines
4496 bytes
El viernes, 11 de julio de 2003, a las 22:27 GMT, Horacio Miranda escribi�:

> mysql no tiene funciones o procedimientos almacenados, postgres si, pero creo
> que existe el for en sql :P
> 

Pues yo me he revisado conciencudamente el manual de mysql y no lo he
encontrado. La �nica forma de simular un for que se me ha ocurrido es
crear una tabla con un �nico campo cuyas valores sean 0,1,2,3,4, etc...
y al hacer un SELECT incluirla en FROM. Por ejemplo, sup�n (de hecho era
mi problema) que tienes una tabla con gastos con los siguientes campos:

fecha: cuando se produce el gasto
importe: el importe del gasto
vigencia: el plazo de amortizaci�n del gasto en meses. Por ejemplo, si
te compras una barra de pan est� claro que el plazo de amortizaci�n es
uno (te comes la barra ese d�a y ya est�). Sin embargo, si lo que haces
es pagar la matr�cula de la Universidad lo m�s realista no es achacar
ese gasto al mes de octubre sino al periodo octubre-junio (vigencia=9) o
octubre-septiembre (vigencia=12).

Perfecto. Ahora imagina que quieres hacer una consulta sobre la tabla
que te desglose tus gastos por meses. �Cu�l es el problema? Pues que un
gasto que se amortiza en varios meses es un �nico registro y, sin embargo,
tiene que engrosar el gasto de varios meses. Eso es imposible de hacer
directamente con un SELECT: cada registro s�lo puede sumar una vez (o
ninguna). A m� el �nico modo que se me ha ocurrido para resolverlo (en
vista de que no ve�a el for por ning�n sitio) es algo as�:

SELECT gastos.*
FROM auxiliar,gastos
WHERE
    auxiliar.indice<gastos.vigencia

Evidentemente gastos es la tabla de gastos y auxiliar es esta tabla de
�ndices que digo.

De esto modo, logro que cada registro aparezca exactamente el mismo
n�mero de veces que indica su campo vigencia. Evidentemente esta es una
consulta muy cruda. Habr�a que hacer comprobaciones sobre la fecha,
agruparlo por meses, etc... para obtener la consulta que he propuesto m�s
arriba.

Por cierto, que si cuento todo el problema es por conocer si a alguno se
le ocurre una soluci�n mejor. La pega de esta soluci�n es que la tabla
auxiliar tiene un n�mero determinado de registros. Por ejemplo, 48 (4
a�os). Si la hago as�, la base de datos estar� limitada a que las
amortizaciones sean menores de 4 a�os.

De ah� que empezase el hilo preguntando lo que pregunt�. Al final he
tirado por el camino de en medio. He creado una tabla auxiliar de 48
registros y cada vez que introduzco un nuevo gasto, un script me
comprueba si el plazo de amortizaci�n de ese nuevo gasto es mayor que el
n�mero de registros. Si es as�, aumenta el tama�o de la tabla auxiliar
lo necesario con un for (de bash). No he querido usar php ni perl porque
no s� y adem�s mi objetivo era (y es) hacer las consultas en el SQL que
me provee mysql, para prender el lenguaje SQL.

Una chapucilla que no me acaba de convencer. :(

-- 
Parezco en mi fortuna al Manzanares,
que con agua o sin ella siempre es r�o.
                  --- Tom� de Burguillos ---
   Si     Di�xido de Silicio |        Debian GNU/Linux 
  /  \         (SiO2)        |    Jos� Miguel S�nchez Al�s
 O    O   Mineral de Cuarzo  |  sio2.arr@ba.online.fr | URL #257033
Technical Details
Message-ID: <slrnbh4tpb.f9.sio2.arr@cebolleta.net.dhis.org>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!fu-berlin.de!uni-berlin.de!22.red-80-37-129.pooles.rima-tde.NET!not-for-mail
References: <slrnbgu024.3k6.sio2.arr@cebolleta.net.dhis.org> <20030711190300.47F26D.NOFFLE@BlackSpark.local> <slrnbgu6o1.5db.sio2.arr@cebolleta.net.dhis.org> <20030711202456.A073EE5.NOFFLE@BlackSpark.local> <3F0F39B8.AAE0BDDC@yale.cl>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: f86c8,640dfadfbdbf4597
X-Google-Attributes: gidf86c8,public
X-Google-ArrivalTime: 2003-07-14 02:30:07 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!fu-berlin.de!uni-berlin.de!22.red-80-37-129.pooles.rima-tde.NET!not-for-mail
From: sio2 <sio2.arr@ba.online.fr>
Newsgroups: es.comp.os.linux.programacion
Subject: Re: Consulta en mysql
Date: Mon, 14 Jul 2003 11:26:04 +0200
Lines: 67
Message-ID: <slrnbh4tpb.f9.sio2.arr@cebolleta.net.dhis.org>
References: <slrnbgu024.3k6.sio2.arr@cebolleta.net.dhis.org> <20030711190300.47F26D.NOFFLE@BlackSpark.local> <slrnbgu6o1.5db.sio2.arr@cebolleta.net.dhis.org> <20030711202456.A073EE5.NOFFLE@BlackSpark.local> <3F0F39B8.AAE0BDDC@yale.cl>
Reply-To: sio2.arr@ba.online.fr
NNTP-Posting-Host: 22.red-80-37-129.pooles.rima-tde.net (80.37.129.22)
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
X-Trace: news.uni-berlin.de 1058175006 8916411 80.37.129.22 (16 [113866])
X-Orig-Path: cebolleta.net.dhis.org!news
User-Agent: slrn/0.9.7.4 (Linux)