gpt4 book ai didi

mysql - 如何在 JOINED 表中使用 FIND_IN_SET?

转载 作者:行者123 更新时间:2023-11-29 07:18:42 26 4
gpt4 key购买 nike

我有 2 张 table :

  • 用户:注册献血者的姓名及其血型。
  • 血液:包含血型和血液相容性。例如:血液 ID 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 记录也应该显示,因为血液 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;

但是,您确实应该有一个单独的表,其中每种血型和可以接收的每种类型占一行。这称为连接表。用逗号分隔的字符串存储列表并不是 SQL 的处理方式:表才是。

编辑:

像这样:

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;

关于mysql - 如何在 JOINED 表中使用 FIND_IN_SET?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36903741/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com