我在一个表中有一个父名称的数据库。列:id,name。 在其他表id中,parent_id,name。 在搜索字段中输入名称。不要说鲍勃,爱丽丝和汤姆。 我必须在数据库中搜索他们有孩子的父母,他们有Bob,Alice和Tom。他们可以有更多的孩子,但他们必须有这三个孩子。
让我们说Edmund有孩子:Bob,Tom,Bart,Alice和Liza,Richard有Bob,Alice和Ned。
鉴于这些名称,数据库应仅返回Edmund。
我应该如何为这个问题编写SQL查询,还是应该用PHP编写?
答案 0 :(得分:0)
您可以与父母一起加入孩子。在WHERE子句中,您可以过滤给定的子名称
WHERE c.name IN ('Bob', 'Alice', 'Tom')
然后按父ID分组。
未经测试:
SELECT p.id, MAX(p.name), count(*)
FROM child AS c
JOIN parent AS p ON c.parent_id = p.id
WHERE c.name IN ('Bob', 'Alice', 'Tom')
GROUP BY p.id
现在您可以使用计数值等于请求的子名称数的父母。
答案 1 :(得分:0)
您需要正确定义表结构。 你可以尝试一下......
TableChildren
------------------
------------------
Name ParentID
Bob 1
Alice 1
Tom 1
Jerry 2
Jerry 1
ParentID是子表中的外键。 ParentID将是主键父表,如下所示:
TableParents
--------------
--------------
ID Name
1 Edmund
2 Emma
这意味着Bob,Alice和Tom是Edmund的孩子。 而杰瑞同时爱德蒙和艾玛都是父母。