php - 带 CASE/WHEN 或开关的父/子 MySQL 查询

标签 php mysql switch-statement

我正在使用 PHP 根据父/子关系动态地将另一个表添加到页面。

我已经大大简化了事情,所以假设我有一个表“FAMILY”,其中包含三列 Parent Int(6)、Child varchar(15) 和 Fname varchar(25)。该表有四行,其值为: 第 1 行:4,NULL,比尔 第 2 行:5、4,汤姆 第 3 行:6、NULL、弗兰克 第 4 行:7、4、山姆

正如您所知,汤姆和弗兰克是比尔的 child 。所以比尔是汤姆和山姆的 parent 。

无论我当前正在查看谁的记录,我都希望能够动态地查看其他关联的记录。忘记 PHP 部分吧,我已经可以工作了。我只需要 MySQL 查询。

在我看来,我需要一个查询来根据 child 的值执行两项不同的操作。 1:如果子项为 NULL(或空白),如第 1 行中所示,我需要它根据父项值 4 返回第 2 行和第 4 行。换句话说,我正在查看父项。 2) 如果 Child 不为 NULL,如第 2 行和第 4 行所示,我需要它返回第 1 行和另一行第 2 行或第 4 行,具体取决于我正在查看哪个子项。现在我正在查看 child 记录。

SELECT * FROM FAMILY WHERE
 CASE WHEN Child  IS NOT NULL then parent = 4
 WHEN child IS NULL then child = 4
 END
 GROUP BY PARENT

我很确定我错误地使用了 CASE/WHEN,但在尝试了大约一千种方法后,我放弃了,需要寻求帮助。

请提供一个可以评估它是父项还是子项然后提取适当行的 MySQL 查询,我们将不胜感激。

提前致谢。

最佳答案

从您的问题陈述中不太确定,但您可以将 WHERE 条件修改为如下所示

 WHERE (Child  IS NOT NULL AND parent = 4)
 OR COALESCE(child, 4) = 4

关于php - 带 CASE/WHEN 或开关的父/子 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32279636/

相关文章:

java - Large Switch Case(60 个不同的 Cases)——我该如何减少?或完善代码

java - 如何使用 String 和 Scanner 修复 Switch-case

javascript - 通过 jQuery Ajax 将 JavaScript 数组发送到 PHP 数组

php - 如何在 PHP 中运行 bind_param() 语句?

php - 为什么人们会在 PHP 中使用 `$a = $b = 2;`?

mysql - 如何将两个查询与 case 语句结合起来

mysql - SQL如何正确地进行外部连接

mysql - 按查询分组不返回所有值

java - 开关: duplicate case

php - 更新 PHP 和 MySQL 服务器实例