SQL在表中查找特定字符

时间:2017-04-14 22:26:14

标签: php mysql sql-server

我有一张这样的表

d_id    | d_name | d_desc | sid
1       |flu     | ....   |4,13,19

其中sid是VARCHAR。我想要做的是当输入4或13或19时,它会显示流感。但是,我的查询仅在用户选择所有这些值时才有效。这是我的查询

SELECT * FROM diseases where sid LIKE '%sid1++%'

从上面的查询中,我使用PHP并使用for循环将sid值放在LIKE值中。所以我只是把sid ++放在一边简单。我的查询仅在存在所有值时才有效。如果让用户选择4和19,那将是'%4,19%'然后它什么也没显示。谢谢大家。

1 个答案:

答案 0 :(得分:1)

如果必须按照您的要求执行操作,您可以尝试使用FIND_IN_SET()

SELECT d_id, d_name, d_description
  FROM diseases
 WHERE FIND_IN_SET(13,sid)<>0

但是这个查询will not be sargable,如果你的表包含超过几十行,它将会非常慢。和ICD10 list of disease codes contains almost 92,000 rows。在你查找疾病之前,你不希望你的病人死亡或康复。 : - )

因此,您应该创建一个单独的表。我们称之为diseases_sid

它将包含两列。对于您的示例,内容将是

   d_id    sid
      1     4
      1    13
      1    19

如果您想通过sid从diseases表中找到一行,请执行此操作。

SELECT d.d_id, d.d_name, d.d_description
  FROM diseases d
  JOIN diseases_sid ds ON d.d_id = ds.d_id
 WHERE ds.sid = 13 

当他们提到规范化时,我的同事们在评论中谈论的是什么。