Tuesday, October 24, 2006

Algoritmo del Índice Menor en PHP


Cada vez que nosotros creamos una tabla en MySQL, asignamos un valor de índice a cada uno de los registros que la conforman. Teniendo por ejemplo esto:

Id Nombre
-- ------
1 Manzanas
2 Peras
3 Platanos
4 Chirimoyas
5 Mandarinas

Ahora, supongamos que ya nos gustan las peras, y decidimos eliminarlas. Nuestra tabla quedaría así:

Id Nombre
-- ------
1 Manzanas
3 Platanos
4 Chirimoyas
5 Mandarinas

Y ustedes se preguntarán...¿Y dónde quedó el registro 2?
Es lo mismo que yo me pregunté...Por eso escribí el "Algoritmo del Índice Menor".

Este código lo escribí tanto para MySQL como para SQLite hace un par de años -:)

Versión MySQL

/*-------------------Algoritmo del Indice Menor-------------*/
/* Autor: Alvaro "Blag" Tejada Galindo */
/* Mail: atejada@gmail.com */
/* Fecha: 24 de Marzo del 2004 */
/*----------------------------------------------------------*/

function Indice_Menor($Table_Name)
{
$Get_Key = mysql_query("SELECT MIN(Id) FROM $Table_Name")
or die(mysql_error());

while($row = mysql_fetch_array($Get_Key))
{
$Key = $row["MIN(Id)"];
}

$Key_Plus = 1;

$query = mysql_query("SELECT * FROM $Table_Name")
or die(mysql_error());

while($row = mysql_fetch_array($query))
{

$query_update = mysql_query("UPDATE $Table_Name
SET Id='$Key_Plus'
WHERE Id = '$Key'")
or die(mysql_error());

$Key += 1;
$Key_Plus += 1;

if($Key == $Id)
{
$Key += 1;
}
}
}
?>

Versión SQLite

/*-------------------Algoritmo del Indice Menor-------------*/
/* Autor: Alvaro "Blag" Tejada Galindo */
/* Mail: atejada@gmail.com */
/* Fecha: 16 de Junio del 2004 */
/*----------------------------------------------------------*/

function Indice_Menor($DB_Name,$Table_Name,$Id)
{
$sqldb = sqlite_open($DB_Name);
$db = new SQLiteDatabase($DB_Name);

$Get_Key = sqlite_query($sqldb,"SELECT Id FROM $Table_Name");
$Num_Rows = sqlite_num_rows($Get_Key);

if($Num_Rows >= 0)
{$MKey = 1;}

$Key_Plus = 1;

while(list($row) = sqlite_fetch_array($Get_Key))
{
$db->query("BEGIN;
UPDATE $Table_Name SET Id=$Key_Plus
WHERE Id = $MKey;
COMMIT");

$MKey += 1;
$Key_Plus += 1;

if($MKey == $Id)
{
$MKey += 1;
}
}
}
?>

Luego de aplicar cualquiera de estos códigos, nuestra tabla quedaría así:

Id Nombre
-- ------
1 Manzanas
2 Platanos
3 Chirimoyas
4 Mandarinas

Saludos,

Blag.

No comments: