我有 2 张桌子:
-
user:注册献血者的姓名及其血型。
-
blood:包含血型和血液相容性。例如:血液为5(A-)可以接受5(A-)和6(O-)的献血。
我必须建立一个搜索表单来检索潜在的献血者。该表格允许用户搜索特定血型的捐献者。如果我搜索血型 5 (A-),查询应返回具有 5 (A-) 和 6 (O-) 血型的所有用户,并且结果列表应显示每个用户的姓名和血型。
我尝试过以下方法:
SELECT user.name, blood.name AS blood FROM user JOIN blood ON blood.id_blood = user.id_blood WHERE user.id_blood = 5
这只会带来具有搜索到的确切血型的其他用户,而不是所有兼容的血型。
然后,我尝试了另一个查询。这将搜索所有兼容的血型,但结果也会按血型过滤(还应显示血型 6 记录,因为receive
血液 id 5 列包含5,6
.)
SELECT user.name AS name, blood.name AS blood FROM user JOIN blood ON blood.id_blood = user.id_blood WHERE FIND_IN_SET(5, blood.receive)
...但由于某种原因它没有显示正确的行。我看到一些 A+、AB+、A- 记录,应该只有 A- 和 O- 记录。
这是表的结构jsfiddle.
你需要把find_in_set()
in the ON
clause:
SELECT u.name AS name, b.name AS blood
FROM user u JOIN
blood b
ON FIND_IN_SET(u.id_blood, b.receive) > 0;
但是,您确实应该有一个单独的表,其中每种血型和可以接收的每种类型占一行。这被称为连接表。用逗号分隔的字符串存储列表并不是 SQL 的处理方式:表才是。
EDIT:
像这样:
SELECT u.name AS name, b.name AS blood
FROM user u JOIN
blood b
ON FIND_IN_SET(u.id_blood, b.receive) > 0
WHERE u.id_blood = 5;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)