gpt4 book ai didi

mysql - 如何将一个表左连接n次?如果可能的话,使用 ZendDb?

转载 作者:行者123 更新时间:2023-11-30 01:07:37 25 4
gpt4 key购买 nike

我有一个很难解释的(mysql)sql查询问题:

我有一个数据库表,用于存储参数值以及与参数值关联的案例 ID。

外键是parent_id,每个父级可以有可变数量的参数。

这意味着如果有三个参数,则有三行、四个参数、四行等。

同一个父项也可以有多个条目。我需要比较该父级所有参数的参数值,以获取案例 ID。该表是这样的:

表壳

id      param_value param_id parent_id caseID
----------------------------------------------
1 red 101 200 1234
2 pepper 102 200 1234
3 green 101 200 3456
4 pepper 102 200 3456
5 pink 205 250 9875
6 panther 206 250 9875
7 fuzzy 207 250 9875

上面的例子:有两种不同类型的 parent :200 和 250。200 有两个案例 ID 的两组:

1234:参数 101 = 红色,参数 102 = 胡椒

3456:参数 101 = 绿色,参数 102 = 胡椒

第三个父级是其他某个父级,并且恰好有三个参数(它可能有更多!)

所以我会知道父级是谁,该父级的参数 ID,并且我将拥有参数值,并且我需要找到相应的案例 ID。

我可以使用两个参数和选择来完成此操作,例如:

SELECT c1.caseId from case c1
INNER JOIN case c2 ON c1.caseId=c2.caseID
WHERE c1.param_id=101 and c1.param_value='red'
AND c2.param_id=102 and c1.param_value='pepper';

(这将返回 caseId = 1234)

但是:

  1. 仅使用 SQL,我无法弄清楚如何使用两个以上的内部联接来执行此操作(因此我无法对具有三个参数的粉红豹提出类似的请求)。我需要知道如何使用可变数量的参数进行 sql 查询。

  2. 我可以使用 zend 中的原始 sql 来完成此操作,但如果有某种方法可以使用 php Zend 来完成此操作,那么我洗耳恭听!

最佳答案

假设case表中有约束:

CONSTRAINT UNIQUE (param_id, parent_id, caseID )

这意味着表中不能包含这三个字段具有相同值的重复行,例如以下情况不会发生:

id      param_value param_id parent_id caseID
----------------------------------------------
1 red 101 200 1234
2 pepper 101 200 1234

那么下面的查询可用于检索任意数量参数的case id(下面是 2 个参数的示例):

SELECT caseID
FROM cas
WHERE (param_id, param_value) IN
(
(101,'red'),
(102,'pepper')
)
GROUP BY caseID
-- a number 2 below - is a number of parameters pairs within the IN clause
HAVING count(distinct param_id) = 2

演示 --> http://www.sqlfiddle.com/#!2/a9f4e/4

关于mysql - 如何将一个表左连接n次?如果可能的话,使用 ZendDb?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19633836/

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