如何在 JOINED table 中使用 FIND_IN_SET?
How can I use FIND_IN_SET within a JOINED table?
我有 2 个表:
- 用户: 登记献血者姓名及血型。
- blood:包含血型和血液相容性。例如:血液编号 5 (A-) 可以接受来自 5 (A-) 和 6 (O-) 的献血。
我必须建立一个搜索表单来检索潜在的献血者。该表格允许用户搜索特定的血型捐献者。如果我搜索血型 5 (A-),查询应该 return 所有拥有 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 记录也应显示,因为血液 id 5 的 receive
列包含 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()
放在 ON
子句中:
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;
但是,您确实应该有一个单独的 table,每个血型和可以接收的每种类型各占一行。这称为 连接点 table。以逗号分隔的字符串存储列表不是 SQL 的处理方式:table 是。
编辑:
像这样:
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;
我有 2 个表:
- 用户: 登记献血者姓名及血型。
- blood:包含血型和血液相容性。例如:血液编号 5 (A-) 可以接受来自 5 (A-) 和 6 (O-) 的献血。
我必须建立一个搜索表单来检索潜在的献血者。该表格允许用户搜索特定的血型捐献者。如果我搜索血型 5 (A-),查询应该 return 所有拥有 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 记录也应显示,因为血液 id 5 的 receive
列包含 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()
放在 ON
子句中:
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;
但是,您确实应该有一个单独的 table,每个血型和可以接收的每种类型各占一行。这称为 连接点 table。以逗号分隔的字符串存储列表不是 SQL 的处理方式:table 是。
编辑:
像这样:
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;