php - SQL查找表中的特定字符

标签 php mysql sql-server

我有一张这样的 table

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%”,那么它什么也不显示。谢谢大家。

最佳答案

如果您必须执行您要求的操作,您可以尝试使用 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 

这就是我的同事在评论中提到标准化时所谈论的内容。

关于php - SQL查找表中的特定字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43420007/

相关文章:

javascript - PHP foreach 与通过 AJAX 发送的多维数组的怪异

MySQL - UNION ALL 查询 - 未知列错误

MYSQL 不接受空格

mysql - 有什么方法可以加快包含 IN 子句的 sql 查询,其中 IN 子句的数据是从查询中获取的?

sql-server - 无法连接到在Docker容器中运行的SQL Server实例

php - 计算列的内容

php - 从 csv php 创建键值对

php - 查找重复的书籍

c# - 如何通过 C# 将可空整数列的空值插入 SQL 表

sql-server - 安装 Visual Studio 2012 后无法连接任何远程数据库服务器