如何在多值列中选择一个值?

时间:2016-03-22 11:16:42

标签: mysql sql

我有一个名为doc的表,其中有几个字段:

user_id | user_name | hostel | summary | branch | year | doc

在此字段中,条目是:

 user_id user_name   hostel       summary     branch   year     doc
 1       shikhar.447  K.P-6        TnpRegi     CSE      2011     s.JPG
 2 shikhar.447       K.P-6        EndSeme     CSE      2011     placemet.jpeg 
 3 shikhar.447       K.P-9        DDD         I.T      2011     og (1).jpg 
 5 shikhar.447       K.P-6,K.P-9  EEE         CSE,I.T  2011,2012 Drawing6.jpg 
 6 shikhar.447       K.P-6,K.P-9  Xzxx        CSE,I.T  2011,2012 Drawing5.jpg
 8 shikhar.447       K.P-6        Zxzxzx      CSE      2011      Drawing2.jpg
 9 shikhar.447       K.P-6,K.P-9  NLKLD       CSE      2011      Drawing.jpg

如果没有正确显示,那么我想澄清一下 :

1 is user_id,shikhar.447 is user_name,K.P-6 is hostel,TnpReg is summary,CSE 
is branch,2011 is year,s.JPG is doc
similarly in some column you can see there are multiple entries with a comma(,)
like K.P-6,K.P-9.

所以我的问题是我应该写什么查询 如果我选择hostel =" K.P-6&#34 ;, branch =" CSE",year = 2011 从复选框中提交它。它必须显示多列值的doc列值以及单列值的结果。

最初我写了这样的查询:

SELECT doc,summary FROM doc WHERE hostel="K.P-6" OR branch="CSE" AND year="2011"

但它只给我单值列,它不会在多值列中搜索。

所以任何人都可以帮助我。

2 个答案:

答案 0 :(得分:1)

在where子句中使用like

SELECT doc,summary FROM doc WHERE hostel like "%K.P-6%" OR branch like "%CSE%" AND year="2011"

但是,建议您将表格标准化

答案 1 :(得分:0)

将多个值存储在一个列中是一个坏主意。

但是,在您的情况下,您可以使用find_in_set()

SELECT doc, summary
FROM doc
WHERE find_in_set('K.P-6', hostel) > 0 OR
      find_in_set('CSE', branch) AND
      find_in_set('2011', year);

对于条件,您还应该与ORAND保持一致。我不确定你真正想要的是什么,所以我没有改变逻辑。