martes, 11 de febrero de 2014

[MYSQL] Buscar varios ID no consecutivos utilizando una sola consulta



Hace un rato tenia un problema con respecto a como decir si un folio que quiero liberar ya fue liberado anteriormente, por la situación que una empresa libera folios según la región que se maneja, por lo que quería ver la manera de mandar un arreglo como parámetros a MYSQL para no tener que hacer una consulta por cada uno de los folios. La respuesta fue mas sencilla gracias al apoyo del licenciado. Lo único que se hizo fue poner todos los folios en una cadena separandolos por una coma, suponiendo que tengo un arreglo con los numeros de folio (OJO no necesariamente están consecutivos porque si no pues un between me ayudaría muy rápidamente). Por lo que supongamos que tenemos un arreglo llamado folios con la programación solo concatene de la siguiente manera (c#): 

string dato = "";
foreach(int i in folios) 
     {
         dato = dato + Convert.ToString(i);
         dato = dato + ",";
      }
dato = dato.Remove(dato.Length - 2);
Una vez tenido eso mande llamar el procedimiento tomando en cuenta que lo único que quiero saber es cuantos folios están repetidos. 

MySqlCommand SQLComando = new MySqlCommand("buscaFolios", SQLConexion);
SQLComando.CommandType = CommandType.StoredProcedure;
SQLComando.Parameters.AddWithValue("pparam", dato);                
MySqlDataReader reader = SQLComando.ExecuteReader();
reader.Read();                
int numero = Convert.ToInt32(reader["numero"]);
if (numero == 0)
  {
    MessageBox.Show("no folios repetidos");
  }
else
    MessageBox.Show("Existe ya " + numero + " de folios repetidos en la base de datos", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
Almacenándolo en la variable numero si es 0 quiere decir que los folios no han sido usados, si no quiere decir que ya existen. Para el procedimiento almacenado puse lo siguiente : 

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `buscaFolios`(IN pparam TEXT)
BEGIN
   SELECT count(*) as numero  FROM mitablita WHERE pparam LIKE CONCAT('%', micampo, '%');
END

Y con esto ya tenemos un resultado como el siguiente: 



Espero les ayude

No hay comentarios:

Publicar un comentario