我有一张像
这样的表TBL
---------------------
id users name
---------------------
1 2,3 acc1
2 4 acc2
3 2,4,1 acc3
4 4,1 acc4
在此表中,我希望用户获取id和name 即用户[2]具有哪个ID和名称
假设我通过了用户[2],那么我得到的结果是1和3,并命名为acc1和acc3。
答案 0 :(得分:1)
试试这个会对你有用
if(!empty($_q4)){
foreach($_q4 as $a4) {
$q4 .= $a4;
}
}
答案 1 :(得分:1)
您可以使用XML函数拆分这些逗号分隔值,然后搜索结果:
DECLARE @table TABLE(id INT, users VARCHAR(30), name VARCHAR(30))
INSERT INTO @table VALUES
(1,'2,3','acc1'),
(2,'4','acc2'),
(3,'2,4,1','acc3'),
(4,'4,1','acc4')
SELECT t.id,
t.name,
( c1.value('.', 'varchar(100)') )
FROM (SELECT id,
name,
CAST('<N>' + REPLACE(users, ',', '</N><N>') + '</N>' AS XML)
FROM @table) t(id, name, c)
CROSS APPLY c.nodes('/N') AS t1(c1)
WHERE ( c1.value('.', 'varchar(100)') ) = '2'
答案 2 :(得分:0)
使用LIKE
功能
SELECT id, name
FROM yourtable
WHERE (user = '2' OR user LIKE '2,%' OR user LIKE '%,2' OR user LIKE '%,2,%')
答案 3 :(得分:0)
您不应该在数据库中存储分隔值,但这里有一个解决方案,可以规范化数据:
;WITH CTE AS (
SELECT T1.[id], T2.my_Splits AS [user], T1.[name]
FROM (
SELECT *,CAST('<X>'+replace(T.users,',','</X><X>')+'</X>' as XML) as my_Xml
FROM Table1 T
) T1
CROSS APPLY (
SELECT my_Data.D.value('.','varchar(50)') as my_Splits
FROM T1.my_Xml.nodes('X') as my_Data(D)) T2)
SELECT *
FROM CTE
WHERE [user] = 2
还有一个工作小提琴:http://sqlfiddle.com/#!6/dcec6/1