我有一张这样的 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/