2009-04-10 5 views
6

J'ai une table de produits. Chaque ligne de cette table correspond à un seul produit et est identifiée par un identifiant unique. Maintenant, chaque produit peut avoir plusieurs «codes» associés à ce produit. Par exemple:Valeurs séparées par des virgules dans un champ de base de données

 
Id  | Code 
---------------------- 
0001 | IN,ON,ME,OH 
0002 | ON,VI,AC,ZO 
0003 | QA,PS,OO,ME 

Ce que je suis en train de faire est de créer une procédure stockée afin que je puisse passer dans un code comme « ON ME » et avoir retourner tout produit contenant « ON » ou " ME "code. Comme les codes sont séparés par des virgules, je ne sais pas comment je peux les séparer et les rechercher. Est-ce possible en utilisant seulement TSQL?

Modifier: C'est une table critique. Je n'ai pas l'autorité pour le changer.

Répondre

4

La façon dont vous stockez les données enfreint les règles de normalisation. Une seule valeur atomique doit être stockée dans chaque champ. Vous devez stocker chaque élément dans une seule ligne.

+0

Malheureusement, je ne l'ai pas conçu. Il existe déjà, donc je dois juste faire avec. –

+0

Si vous travaillez sur le système maintenant, n'avez-vous pas le pouvoir de le changer? Même si vous obtenez une solution à votre problème, il ne fonctionnera pas bien mieux que de petits ensembles de données. – JohnFx

+0

Je n'ai pas l'autorité pour le changer. C'est une table critique. –

0

Cela pourrait ne pas être possible si vous êtes coincé avec cette conception de base de données, mais il serait beaucoup plus facile de mettre les codes dans des registres séparés dans une autre table:

ProductCode 
----------- 
ProductID (FK to Product.ID) 
Code (varchar) 

Le tableau pourrait ressembler à ceci :

ProductID Code 
----------------- 
0001   IN 
0001   ON 
0001   ME 
... 

la requête ressemblerait à quelque chose comme ça (vous auriez à passer dans les codes d'une certaine manière - soit sous forme de variables distinctes, ou peut-être une chaîne séparée par des virgules que vous divisez dans le proc):

select ProductID 
from ProductCode 
where Code in ('ON', 'ME') 
11

Vous devriez stocker les codes dans un tableau séparé, car vous avez une relation plusieurs à plusieurs. Si vous les séparez, vous pourrez facilement vérifier.

Il serait possible de faire dans le type de système que vous avez maintenant, mais cela nécessiterait une recherche textuelle des colonnes, avec plusieurs recherches par ligne pour fonctionner, ce qui aura d'énormes problèmes de performance à mesure que vos données augmentent. Si vous essayez de descendre votre chemin actuel: Vous devrez casser votre chaîne d'entrée, car rien ne garantit que les codes sur chaque enregistrement sont dans le même ordre (ou contigu) que le paramètre d'entrée. Ensuite, vous devrez faire un

Code LIKE '%IN%' 
AND Code Like '%QA%' 

requête avec une déclaration supplémentaire pour chaque code que vous vérifiez. Très inefficace.

L'idée UDF ci-dessous est également une bonne idée. Toutefois, en fonction de la taille de vos données et de la fréquence des requêtes et des mises à jour, vous pouvez également rencontrer des problèmes.

serait-il possible de créer une table supplémentaire normalisée qui est synchronisée sur une base planifiée (ou basée sur un déclencheur) pour que vous puissiez faire une requête?

5

Bien que toutes les affiches précédentes sont correctes sur la normalisation de votre schéma db, vous pouvez faire ce que vous voulez en utilisant une "UDF Table-Valued" qui prend une chaîne délimitée et retourne une Table, avec une ligne par valeur dans le string ... Vous pouvez utiliser cette table comme vous le feriez pour n'importe quelle autre table dans votre proc stockée, s'y joindre, etc ... cela résoudra votre problème immédiat ...

Voici un lien vers une telle UDF: FN_Split UDF

Bien que l'article parle de l'utiliser pour passer d'une liste délimitée par des valeurs de données dans un proc stocké, vous pouvez utiliser la même UDF pour fonctionner sur une chaîne délimitée stocké dans une colonne d'une table existante ....

7

Tout le monde semble très désireux de vous dire que vous ne devriez pas faire cela, bien que je ne vois pas d'explication explicite pour pourquoi pas. En dehors de la violation des règles de normalisation, la raison en est que vous effectuerez un balayage de table à travers toutes les lignes, puisque vous ne pouvez pas avoir un index sur les "valeurs" individuelles dans cette colonne. En d'autres termes, le moteur de base de données ne peut pas conserver une liste rapide des lignes contenant le code 'AC', à moins que vous ne le décomposiez dans une table séparée ou que vous le placiez dans une colonne lui-même. Maintenant, si vous avez d'autres critères dans vos instructions SELECT qui limiteront le nombre de lignes à un certain nombre gérable, alors peut-être que ce sera OK, mais sinon, je voudrais, si vous le pouvez, essayer d'éviter cette solution et faites ce que les autres vous ont déjà dit, divisez-le en une table séparée.

Maintenant, si vous êtes coincé avec cette conception, vous pouvez faire une recherche en utilisant le type de requête suivante:

... 
WHERE ',' + Code + ',' LIKE '%,AC,%' 

Ce sera:

  • « Match ON, VI, AC , ZO »
  • correspond pas à 'ON, VI, TAC, ZO'

Je ne sais pas si le dernier est une option viable dans votre cas, i f vous suffit codes à 2 lettres, vous pouvez utiliser ceci:

... 
WHERE Code LIKE '%AC%' 

Mais encore une fois, ce effectuerez horriblement à moins que vous limitez le nombre de lignes en utilisant d'autres critères.

+0

Pas si c'est toute ma réponse que vous avez lu, non, c'est tout à fait correct. S'il vous plaît relisez mon SQL et considérez pourquoi je l'ai écrit comme je l'ai fait. –

+0

Spoiler pour les lecteurs inobservés: il ajoute des virgules au début et à la fin du champ 'Code', * puis * il utilise le prédicat LIKE dessus. –

+0

Et il va fonctionner horriblement, mais pas à cause du fait que j'ajoute des virgules de chaque côté de la clause LIKE. –

8

Tout d'abord, nous allons faire la table d'origine pour devenir comme ceci:


Id | Value 
-----+------ 
0001 | IN 
0001 | ME 
0001 | OH 
0001 | ON 
0002 | AC 
0002 | ON 
0002 | VI 
0002 | ZO 
0003 | ME 
0003 | OO 
0003 | PS 
0003 | QA 

Il est accompli en analysant les valeurs séparées par des virgules en lignes. Utilisez ensuite le puissant mot clé CROSS APPLY pour joindre la table d'origine afin de récupérer son ID. La prochaine étape consiste simplement à interroger ce CTE.


create function FnSplitToTable 
(
    @param nvarchar(4000) 
) 
returns table as 
return 
    with 
    Num(Pos) as -- list of positions, numbered from 1 to 4000, largest nvarchar 
    (
     select cast(1 as int) 
     union all 
     select cast(Pos + 1 as int) from Num where Pos < 4000 
    ) 
    select substring(@Param, Pos, 
     charindex(',', @Param + ',', Pos) - Pos) as Value 
     from Num where Pos <= convert(int, len(@Param)) 
     and substring(',' + @Param, Pos, 1) = ',' 
go 


create proc ProcGetProductId 
(
    @Codes nvarchar(4000) 
) 
as 
with 
Src 
(
    Id, 
    Code 
) 
as 
(
    select '0001', 'IN,ON,ME,OH' 
    union all 
    select '0002', 'ON,VI,AC,ZO' 
    union all 
    select '0003', 'QA,PS,OO,ME' 
), 
Parse as 
(
    select 
     s.Id, 
     f.Value 
    from 
     Src as s 
    cross apply 
     FnSplitToTable(s.Code) as f 
) 
select distinct 
    p.Id 
from 
    Parse as p 
join 
    FnSplitToTable(@Codes) as f 
on 
    p.Value = f.Value 
option (maxrecursion 4000) 
go 

exec ProcGetProductId 'IN,ME' -- returns 0001 & 0003 
+1

de toutes les réponses à cette question, la vôtre est la seule * réponse * – ninegrid

+2

de toutes les publications que j'ai faites, vous êtes le 1er à commenter. THX! :) –

+2

vous serez heureux plus tard que vous l'avez fait – BlackTigerX

0

Je suis d'accord avec d'autres affiches ici que vous devriez examiner attentivement la normalisation du schéma, mais je sais aussi que les raccourcis font partie de la vie.

Voici une exemple de fonction écrit dans le dialecte Sybase qui fait ce que vous faites:

ALTER FUNCTION "DBA"."f_IsInStringList"(IN @thisItem char(2), IN @thisList varchar(4000)) 
RETURNS INTEGER 
DETERMINISTIC 
BEGIN 


DECLARE is_member bit; 
DECLARE LOCAL TEMPORARY TABLE tmp (thisItem char(2)) ; 
DECLARE @tempstring varchar(10); 
DECLARE @count integer; 

IF LENGTH(TRIM(@thisList)) > 0 THEN 

    WHILE LENGTH(TRIM(@thisList)) > 0 LOOP 
     -- loop over comma-separated list and stuff members into temp table 
     IF LOCATE (@thisList, ',' , 1) > 0 THEN 

      SET @count = LOCATE (@thisList, ',' , 1); 
      SET @tempstring = SUBSTRING (@thisList, 1,@count-1); 

      INSERT INTO tmp (thisItem ) VALUES ( @tempstring); 
      SET @thisList = STUFF (@thisList, 1, @count, '') 

     ELSE 

      INSERT INTO tmp (thisItem ) VALUES (@thisList); 
      SET @thisList = NULL; 

     END IF; 

    END LOOP ; 

END IF; 

IF EXISTS (SELECT * FROM tmp WHERE thisItem = @thisItem) THEN 
    SET is_member = 1; 
ELSE 
    SET is_member = 0 ; 
END IF ; 

    RETURN is_member; 
END 

Vous pouvez ensuite créer une requête simple pour vérifier si une valeur se produit dans votre chaîne séparée par des virgules:

select * from some_table t 
     WHERE f_IsInStringList('OR', t.your_comma_separated_column) = 1 OR 
       f_IsInStringList('ME', t.your_comma_separated_column) = 1 
4

Plus d'un an question ancienne, mais toujours pensé que ce sera utile. Vous pouvez utiliser la fonction FIND_IN_SET de MySQL. Je ne suis pas sûr que d'autres SGBD le supportent ou non.

Vous pouvez utiliser cette fonction comme suit:

SELECT * FROM `table_name` WHERE FIND_IN_SET('AC', `Code`) > 0 
0

1ère étape: Code pour créer la fonction

<font face="Courier New" size="2"> 
<font color = "blue">CREATE</font>&nbsp;<font color = "blue">FUNCTION</font>&nbsp;<font color = "maroon">[dbo]</font><font color = "silver">.</font><font color = "#FF0080"><b>[Udflistofids]</b></font>&nbsp;<font color = "maroon">(</font> 
<br/><font color = "green"><i>&#45;&#45;&nbsp;Add&nbsp;the&nbsp;parameters&nbsp;for&nbsp;the&nbsp;function&nbsp;here</i></font> 
<br/><font color = "#8000FF">@ListOfIDs</font>&nbsp;<font color = "blue">AS</font>&nbsp;<font color = "black"><i>VARCHAR</i></font><font color = "maroon">(</font><font color = "maroon">max</font><font color = "maroon">)</font> 
<br/><font color = "green"><i>&#45;&#45;,&nbsp;@IDsSeperationChar&nbsp;as&nbsp;varchar(5)&nbsp;=&nbsp;','</i></font> 
<br/><font color = "silver">,</font> 
<br/><font color = "#8000FF">@UniqueID1</font>&nbsp;<font color = "black"><i>VARCHAR</i></font><font color = "maroon">(</font><font color = "black">250</font><font color = "maroon">)</font><font color = "silver">,</font> 
<br/><font color = "#8000FF">@UniqueID2</font>&nbsp;<font color = "black"><i>VARCHAR</i></font><font color = "maroon">(</font><font color = "black">250</font><font color = "maroon">)</font><font color = "silver">,</font> 
<br/><font color = "#8000FF">@UniqueID3</font>&nbsp;<font color = "black"><i>VARCHAR</i></font><font color = "maroon">(</font><font color = "black">250</font><font color = "maroon">)</font><font color = "silver">,</font> 
<br/><font color = "#8000FF">@UniqueID4</font>&nbsp;<font color = "black"><i>VARCHAR</i></font><font color = "maroon">(</font><font color = "black">250</font><font color = "maroon">)</font><font color = "silver">,</font> 
<br/><font color = "#8000FF">@UniqueID5</font>&nbsp;<font color = "black"><i>VARCHAR</i></font><font color = "maroon">(</font><font color = "black">250</font><font color = "maroon">)</font><font color = "maroon">)</font> 
<br/><font color = "maroon">returns</font>&nbsp;<font color = "#8000FF">@TabListOfIDs</font>&nbsp;<font color = "blue">TABLE</font>&nbsp;<font color = "maroon">(</font> 
<br/>&nbsp;&nbsp;<font color = "green"><i>&#45;&#45;&nbsp;Add&nbsp;the&nbsp;column&nbsp;definitions&nbsp;for&nbsp;the&nbsp;TABLE&nbsp;variable&nbsp;here</i></font> 
<br/>&nbsp;&nbsp;<font color = "maroon">id</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "black"><i>VARCHAR</i></font><font color = "maroon">(</font><font color = "black">50</font><font color = "maroon">)</font><font color = "silver">,</font> 
<br/>&nbsp;&nbsp;<font color = "maroon">uniqueid1</font>&nbsp;<font color = "black"><i>VARCHAR</i></font><font color = "maroon">(</font><font color = "black">250</font><font color = "maroon">)</font><font color = "silver">,</font> 
<br/>&nbsp;&nbsp;<font color = "maroon">uniqueid2</font>&nbsp;<font color = "black"><i>VARCHAR</i></font><font color = "maroon">(</font><font color = "black">250</font><font color = "maroon">)</font><font color = "silver">,</font> 
<br/>&nbsp;&nbsp;<font color = "maroon">uniqueid3</font>&nbsp;<font color = "black"><i>VARCHAR</i></font><font color = "maroon">(</font><font color = "black">250</font><font color = "maroon">)</font><font color = "silver">,</font> 
<br/>&nbsp;&nbsp;<font color = "maroon">uniqueid4</font>&nbsp;<font color = "black"><i>VARCHAR</i></font><font color = "maroon">(</font><font color = "black">250</font><font color = "maroon">)</font><font color = "silver">,</font> 
<br/>&nbsp;&nbsp;<font color = "maroon">uniqueid5</font>&nbsp;<font color = "black"><i>VARCHAR</i></font><font color = "maroon">(</font><font color = "black">250</font><font color = "maroon">)</font><font color = "maroon">)</font> 
<br/><font color = "blue">AS</font> 
<br/>&nbsp;&nbsp;<font color = "blue">BEGIN</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "green"><i>&#45;&#45;&nbsp;Fill&nbsp;the&nbsp;table&nbsp;variable&nbsp;with&nbsp;the&nbsp;rows&nbsp;for&nbsp;your&nbsp;result&nbsp;set</i></font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "blue">DECLARE</font>&nbsp;<font color = "#8000FF">@Pos</font>&nbsp;<font color = "blue">AS</font>&nbsp;<font color = "black"><i>INT</i></font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "blue">DECLARE</font>&nbsp;<font color = "#8000FF">@ID</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "blue">AS</font>&nbsp;<font color = "black"><i>VARCHAR</i></font><font color = "maroon">(</font><font color = "black">50</font><font color = "maroon">)</font><font color = "silver">,</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "#8000FF">@IDsSeperationChar</font>&nbsp;<font color = "blue">AS</font>&nbsp;<font color = "black"><i>VARCHAR</i></font><font color = "maroon">(</font><font color = "black">5</font><font color = "maroon">)</font>&nbsp;<font color = "silver">=</font>&nbsp;<font color = "red">','</font> 
<br/> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "green"><i>&#45;&#45;SET&nbsp;@ListOfIDs&nbsp;=&nbsp;REPLACE(&nbsp;@ListOfIDs,&nbsp;&nbsp;@IDsSeperationChar,&nbsp;',')</i></font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "blue">SET</font>&nbsp;<font color = "#8000FF">@ListOfIDs</font>&nbsp;<font color = "silver">=</font>&nbsp;<font color = "fuchsia"><i>Ltrim</i></font><font color = "maroon">(</font><font color = "fuchsia"><i>Rtrim</i></font><font color = "maroon">(</font><font color = "#8000FF">@ListOfIDs</font><font color = "maroon">)</font><font color = "maroon">)</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "silver">+</font>&nbsp;<font color = "#8000FF">@IDsSeperationChar</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "blue">SET</font>&nbsp;<font color = "#8000FF">@Pos</font>&nbsp;<font color = "silver">=</font>&nbsp;<font color = "fuchsia"><i>Patindex</i></font><font color = "maroon">(</font><font color = "red">'%'</font>&nbsp;<font color = "silver">+</font>&nbsp;<font color = "#8000FF">@IDsSeperationChar</font>&nbsp;<font color = "silver">+</font>&nbsp;<font color = "red">'%'</font><font color = "silver">,</font>&nbsp;<font color = "#8000FF">@ListOfIDs</font><font color = "maroon">)</font> 
<br/> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "green"><i>&#45;&#45;SET&nbsp;@Pos&nbsp;=&nbsp;CHARINDEX(@IDsSeperationChar,&nbsp;@ListOfIDs,&nbsp;1)</i></font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "blue">IF</font>&nbsp;<font color = "fuchsia"><i>Replace</i></font><font color = "maroon">(</font><font color = "#8000FF">@ListOfIDs</font><font color = "silver">,</font>&nbsp;<font color = "#8000FF">@IDsSeperationChar</font><font color = "silver">,</font>&nbsp;<font color = "red">''</font><font color = "maroon">)</font>&nbsp;<font color = "silver">&lt;&gt;</font>&nbsp;<font color = "red">''</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "blue">BEGIN</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "blue">WHILE</font>&nbsp;<font color = "#8000FF">@Pos</font>&nbsp;<font color = "silver">&gt;</font>&nbsp;<font color = "black">0</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "blue">BEGIN</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "blue">SET</font>&nbsp;<font color = "#8000FF">@ID</font>&nbsp;<font color = "silver">=</font>&nbsp;<font color = "fuchsia"><i>Ltrim</i></font><font color = "maroon">(</font><font color = "fuchsia"><i>Rtrim</i></font><font color = "maroon">(</font><font color = "fuchsia"><i>LEFT</i></font><font color = "maroon">(</font><font color = "#8000FF">@ListOfIDs</font><font color = "silver">,</font>&nbsp;<font color = "#8000FF">@Pos</font>&nbsp;<font color = "silver">-</font>&nbsp;<font color = "black">1</font><font color = "maroon">)</font><font color = "maroon">)</font><font color = "maroon">)</font> 
<br/> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "blue">IF</font>&nbsp;<font color = "#8000FF">@ID</font>&nbsp;<font color = "silver">&lt;&gt;</font>&nbsp;<font color = "red">''</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "blue">BEGIN</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "blue">INSERT</font>&nbsp;<font color = "blue">INTO</font>&nbsp;<font color = "#8000FF">@TabListOfIDs</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "maroon">(</font><font color = "maroon">id</font><font color = "silver">,</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "maroon">uniqueid1</font><font color = "silver">,</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "maroon">uniqueid2</font><font color = "silver">,</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "maroon">uniqueid3</font><font color = "silver">,</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "maroon">uniqueid4</font><font color = "silver">,</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "maroon">uniqueid5</font><font color = "maroon">)</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "blue">VALUES</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "maroon">(</font><font color = "#8000FF">@ID</font><font color = "silver">,</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "#8000FF">@UniqueID1</font><font color = "silver">,</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "#8000FF">@UniqueID2</font><font color = "silver">,</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "#8000FF">@UniqueID3</font><font color = "silver">,</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "#8000FF">@UniqueID4</font><font color = "silver">,</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "#8000FF">@UniqueID5</font><font color = "maroon">)</font>&nbsp;<font color = "green"><i>&#45;&#45;Use&nbsp;Appropriate&nbsp;conversion</i></font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "blue">END</font> 
<br/> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "blue">SET</font>&nbsp;<font color = "#8000FF">@ListOfIDs</font>&nbsp;<font color = "silver">=</font>&nbsp;<font color = "fuchsia"><i>RIGHT</i></font><font color = "maroon">(</font><font color = "#8000FF">@ListOfIDs</font><font color = "silver">,</font>&nbsp;<font color = "fuchsia"><i>Len</i></font><font color = "maroon">(</font><font color = "#8000FF">@ListOfIDs</font><font color = "maroon">)</font>&nbsp;<font color = "silver">-</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "fuchsia"><i>Len</i></font><font color = "maroon">(</font><font color = "#8000FF">@ID</font>&nbsp;<font color = "silver">+</font>&nbsp;<font color = "#8000FF">@IDsSeperationChar</font><font color = "maroon">)</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "maroon">)</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "blue">SET</font>&nbsp;<font color = "#8000FF">@Pos</font>&nbsp;<font color = "silver">=</font>&nbsp;<font color = "fuchsia"><i>Patindex</i></font><font color = "maroon">(</font><font color = "red">'%'</font>&nbsp;<font color = "silver">+</font>&nbsp;<font color = "#8000FF">@IDsSeperationChar</font>&nbsp;<font color = "silver">+</font>&nbsp;<font color = "red">'%'</font><font color = "silver">,</font>&nbsp;<font color = "#8000FF">@ListOfIDs</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "maroon">)</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "green"><i>&#45;&#45;SET&nbsp;@Pos&nbsp;=&nbsp;CHARINDEX(@IDsSeperationChar,&nbsp;@ListOfIDs,&nbsp;1)</i></font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "blue">END</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "blue">END</font> 
<br/> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "blue">RETURN</font> 
<br/>&nbsp;&nbsp;<font color = "blue">END</font> 
<br/> 
<br/><font color = "maroon">go</font>&nbsp; 
</font> 


**2nd Step : Code to get the result** 

<font face="Courier New" size="2"> 
<font color = "blue">DECLARE</font>&nbsp;<font color = "#8000FF">@udvMax</font>&nbsp;<font color = "black"><i>NVARCHAR</i></font><font color = "maroon">(</font><font color = "maroon">max</font><font color = "maroon">)</font> 
<br/> 
<br/><font color = "blue">SELECT</font>&nbsp;<font color = "#8000FF">@udvMax</font>&nbsp;<font color = "silver">=</font>&nbsp;<font color = "red">''</font>&nbsp;<font color = "silver">+</font>&nbsp;<font color = "fuchsia"><i>Substring</i></font><font color = "maroon">(</font>&nbsp;<font color = "maroon">(</font>&nbsp;<font color = "blue">SELECT</font>&nbsp;<font color = "red">'&nbsp;Union&nbsp;'</font>&nbsp;<font color = "silver">+</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "red">'Select&nbsp;*&nbsp;from&nbsp;dbo.udfListOfIDs('''</font>&nbsp;<font color = "silver">+</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "maroon">tmpu</font><font color = "silver">.</font><font color = "maroon">code</font>&nbsp;<font color = "silver">+</font>&nbsp;<font color = "red">''',&nbsp;'''</font>&nbsp;<font color = "silver">+</font>&nbsp;<font color = "maroon">tmpu</font><font color = "silver">.</font><font color = "maroon">id</font>&nbsp;<font color = "silver">+</font>&nbsp;<font color = "red">''',&nbsp;'''</font>&nbsp;<font color = "silver">+</font>&nbsp;<font color = "maroon">tmpu</font><font color = "silver">.</font><font color = "maroon">code</font>&nbsp;<font color = "silver">+</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "red">''',&nbsp;null,null,null&nbsp;)'</font>&nbsp;<font color = "blue">FROM</font>&nbsp;<font color = "maroon">tmpu</font>&nbsp;<font color = "blue">FOR</font>&nbsp;<font color = "maroon">xml</font>&nbsp;<font color = "maroon">path</font><font color = "maroon">(</font><font color = "red">''</font><font color = "maroon">)</font><font color = "maroon">)</font><font color = "silver">,</font>&nbsp;<font color = "black">7</font><font color = "silver">,</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "black">200000</font><font color = "maroon">)</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "silver">+</font> 
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color = "red">'&nbsp;Order&nbsp;by&nbsp;UniqueID1,&nbsp;UniqueID2,&nbsp;UniqueID3,&nbsp;UniqueID4,&nbsp;UniqueID5,&nbsp;ID'</font> 
<br/> 
<br/><font color = "green"><i>&#45;&#45;Select&nbsp;@udvMax</i></font> 
<br/><font color = "blue">EXECUTE</font>&nbsp;<font color = "#FF0080"><b>Sp_executesql</b></font> 
<br/>&nbsp;&nbsp;<font color = "#8000FF">@udvMax</font>&nbsp; 
</font> 

**** Peut-être u peut-être ajouter vos critères de sélection dans déclaration à la 2e étape. **

Espérons que cela vous aidera.

JP

0

si vous voulez le faire avec php et mysql il peut être un certain nombre de mots-clés aucune restriction

$var = explode(',',"ahmad,sayeed,asmal,babu"); 
$query = "SELECT * FROM post WHERE post_tags LIKE '%a%' "; 
$query1=NULL; 
foreach($var as $value) 
{ 
    $query1.= " OR post_tags LIKE '%$value%' "; 
} 

echo "$query $query1"; 

SORTIE:

SELECT * FROM poste où post_tags LIKE « % a% 'OU COMME post_tags '% ahmad%' OR post_tags LIKE '% sayeed%' OU SIMILAIRES post_tags '% Asmal%' OR post_tags LIKE '% Babu%'

Questions connexes