gpt4 book ai didi

php - 使用 Laravel 或 PHP 在 mysql 表上建立条件关系

转载 作者:行者123 更新时间:2023-11-30 21:22:11 24 4
gpt4 key购买 nike

我有如下表格。

表A

id  | val_a
1 | a1
2 | a2
3 | a3

表B

id  | id_a| val_b | resource_type
1 | 2 | b1 | 1
2 | 2 | b2 | 2
3 | 3 | b3 | 3
4 | 3 | b4 | 3

表资源_A

id  |r_val| id_b
1 | ra1 | 1

表资源_B

id  |r_val| id_b
1 | rb1 | 2

表资源_C

id  |r_val| id_b
1 | rc1 | 3
2 | rc2 | 4

如果resource_type在表 B 中为 1 ,然后表 B与表建立关系 Resource_A .

如果resource_type在表 B 中为 2 ,然后表 B与表建立关系 Resource_B .

如果resource_type在表 B 中为 3 ,然后表 B与表建立关系 Resource_C .

要求的输出是:

id_b | id_a| val_b |val_a | resource_type| r_val
1 | 2 | b1 | a1 | 1 | ra1
2 | 2 | b2 | a2 | 2 | rb1
3 | 3 | b3 | a3 | 3 | rc1
4 | 3 | b4 | a3 | 3 | rc2

但是在 laravel 中不使用循环的最佳方法是什么?

如何使用 Laravel 5.2 或 Laravel 4 或 PHP 或 MYSQL 查询来实现此目的?

提前致谢。

最佳答案

您只需按照我在下面所做的那样将表格连接在一起。这里棘手的部分是从三个资源表中引入正确的 r_val。我们可以通过左连接到每个资源表,然后使用以下表达式来获取匹配值:

COALESCE(t1.r_val, t2.r_val, t3.r_val) AS r_val

这将从资源表中获取第一个非 NULL 值,按从左到右的顺序。假设 tableb 中的每个 ID 只出现一次,在其中一个资源表中,COALESCE() 中的术语顺序应该无关紧要。

SELECT tb.id AS id_b,
tb.id_a,
tb.val_b,
COALESCE(ta.val_a, 'NA') AS val_a,
tb.resource_type,
COALESCE(t1.r_val, t2.r_val, t3.r_val) AS r_val
FROM tableb tb
LEFT JOIN tablea ta
ON tb.id_a = ta.id
LEFT JOIN resource_a t1
ON tb.id = t1.id_b
LEFT JOIN resource_b t2
ON tb.id = t2.id_b
LEFT JOIN resource_c t3
ON tb.id = t3.id_b

此处演示:

SQLFiddle

关于php - 使用 Laravel 或 PHP 在 mysql 表上建立条件关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42152945/

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