Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Uso de IN en una sentencia SQL (https://www.clubdelphi.com/foros/showthread.php?t=35036)

gaby_stars 29-08-2006 17:55:10

Uso de IN en una sentencia SQL
 
Hola bue día a todos

Estoy tratando de hacer una sentencia SQL agregandole una IN

Código SQL [-]
SELECT us.numero,us.nombre,ad.cveusuario,ad.falta,ad.id_adm,us.id_usu,ad.id_usu
 
FROM administradores ad
LEFT JOIN usuarios us ON (us.id_usu=ad.id_usu) 
WHERE ad.borrado=0 AND us.borrado=0 AND us.id_pza IN (:PARAMENTRO)

De que manera puedo realizar esta sentencia ya que puedo buscar de uno a N datos dentro del IN.

Saludos

luisgutierrezb 29-08-2006 19:43:54

pues algunos manejadores de bases de datos te dejan hacer algo asi como:
in ('rojo', 'verde', 'azul') y la lista de n elementos

gaby_stars 29-08-2006 20:53:57

Sigo con la duda de hacer un In en una SQL
 
Gracias por la respuesta luisgutierrezb

Pero mi problema es que al hacer el llamado de esta sentencia SQL en Delphi es donde puede varia la cantida de elementos que quiero localizar, ya que un usuario puede necesitar un solo elemento pero otro puede necesitar mas de uno. Es por eso que no se como manipular esta sentencia.

luisgutierrezb 29-08-2006 21:23:41

tendrias que construir tu sentencia manualmente, e ir revisando de uno por uno, algo asi como:
if tipo=x then
opciones := opciones + 'x, ';
if tipo=y then
opciones := opciones + 'y, ';
etc...

Emilio 29-08-2006 21:59:19

Creo que lo que necesitas es que tus usuarios ingresen una o varias palabras para realizar una búsqueda, sí así es te paso un trozo de código PHP que con un par de cambios te puede servir en Delphi.

Código PHP:

if ( $scan!="" ) {
   
$scan   StrToUpper$scan );
   
$ascan  split" ",$scan );
   for (
$i 0$i count($ascan); $i++) {
      if (
$i==0) {
         
$sql_scan      "SELECT * FROM articulos where (referencia like '%".$ascan[0]."%' or denominacion like '%".$ascan[0]."%' )";
         
$result_scan   db_query$sql_scan );
         while ( 
$row_scan mysql_fetch_array$result_scan ) ) {
            
$codigos[]  = $row_scan["articulos_id"];
            
$encontrado true;
         }
         if ( 
$encontrado ) {
            
$codigos implode(",",$codigos );
            
$sql_scan .= " AND articulos_id IN ( $codigos ) ";
         }
      }
      if (
$i!=0) {  // else {
         
$sql_scan .= " AND (referencia like '%$ascan[$i]%' or denominacion like '%$ascan[$i]%' )";
      }
   }
   
$SQL $sql_scan;



Héctor Randolph 29-08-2006 22:53:32

Yo lo hago de esta forma desde Delphi:

Utilizo un TStringList para almacenar los valores de la consulta; pueden ser una o más cadenas, después construyo la sentencia SQL, en tu caso

Código SQL [-]
SELECT us.numero,us.nombre,ad.cveusuario,ad.falta,ad.id_adm,us.id_usu,ad.id_usu
 
FROM administradores ad
LEFT JOIN usuarios us ON (us.id_usu=ad.id_usu) 
WHERE ad.borrado=0 AND us.borrado=0 AND us.id_pza IN (:PARAMENTRO)

Le envió como parámetro la propiedad Commatext del TStringList que te da el mismo formato que propuso luisgutierrezb anteriormente, es decir, si la lista de cadenas contiene:

Código:

  verde
  azul
  rojo

La propiedad CommaText devuelve 'verde,azul,rojo'


Espero que sea útil.

Saludos

ContraVeneno 30-08-2006 00:30:35

el problema es que cada uno de los elementos, si estos son texto, deberían estar entre apóstrofes:

'azul', 'verde', 'rojo'

de esa forma para que puedieran quedar dentro del IN... ya lo había manejado de esamanera, pero ya no tengo delphi aquí.... extraño a delphi :( , lo que yo hacía era grabarlos entre apóstrofes al StringList... de esa manera al usar el commaText, estos ya aparecían con apóstrofes.


ya que si los pasas como 'azul, verde, rojo' no creoq ue vaya a funcionar.

FOURIER 03-09-2006 09:41:21

Espero Te Sirva
 
YO LO QUE VEO ES QUE COMPARAS UNA VARIABLE CON UN CAMPO, ESA VARIABLE PUEDO TOMAR VARIOS VALORES PERO A FIN DE CUENTAS SOLO COMPARAS UNA VARIABLE CON UN CAMPO EL IN ES 1 A N NO TIENE CASO QUE USES EL IN PUEDES USAR EL SIMBOLO "=" SIN PROBLEMAS


ADOQUERY.SQL.TEXT:='
SELECT us.numero,us.nombre,ad.cveusuario,ad.falta,ad.id_adm,us.id_usu,ad.id_usu FROM administradores adLEFT JOIN usuarios us ON (us.id_usu=ad.id_usu) WHERE ad.borrado=0 AND us.borrado=0 AND us.id_pza = :PARAMENTRO';ADOQUERY.Parameters.ParamValues['PARAMENTRO']:=EDIT1.TEXT;ADOQUERY.OPEN; POR EJEMPLO EN CASO DE QUE EL VALOR QUIERES QUE SE TOME DE UN EDIT O SI NO SIMPLEMENTE O SI NO SIMPLEMENTE CONCATENAS PERO EL IN DEFINITIVAMENTE NO SE USA AHI


La franja horaria es GMT +2. Ahora son las 21:29:02.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi