我试图决定哪一个更好:设计一个浪费大量空间的表格,有一个简单的查询,或者写一个非常紧凑的表格,但是找到我要找的东西的过程会非常紧张。
实际的问题是:
想象一下你有一张非常简单的桌子。第一列为ID号,第二列是名称列表,第三列也是名称列表。第二栏是第三栏中欠人的名单。
搜索应执行以下操作:
我在第三栏中寻找一个名字,看看谁欠这个人在第二栏。一个或多个名字出现,然后我想看看谁欠他们,再次出现了一堆名字,以此类推到第5级。
也许这是一个众所周知的方案,在表设计或MySQL圈中有一个众所周知的简单答案。有人能建议一个MySQL查询,或者一个合适的表设计,我可以使用一个简单的查询吗?
示例
ID owes owned to
1 Peter John
2 John George
3 Abdul George
4 George Anna所以我可以设计这样一张浪费的桌子
ID 1 2 3 4 5
1 Anna George Abdul
2 Anna George John Peter
3 George Abdul
4 George John Peter
5 John Peter但这将是非常浪费和糟糕的设计,但它将是非常容易访问的数据,以及层次和欠款链。
发布于 2014-04-10 04:44:23
像这样的东西似乎是合适的:
people
+----+--------+
| id | name |
+----+--------+
| 1 | Marty |
| 2 | Steven |
| 3 | John |
+----+--------+在表中建立人与人之间的关系:
loans
+-----------+-------------+
| lender_id | borrower_id |
+-----------+-------------+
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
+-----------+-------------+您可以通过以下简单的方法让所有欠某个贷款人的人:
SELECT people.id, people.name
FROM loans
INNER JOIN people ON people.id = loans.borrower_id
WHERE loans.lender_id = X其中X是贷款人的id。例如,考虑到lender_id of 1 (Marty)会产生这样的结果:
+----+--------+
| id | name |
+----+--------+
| 2 | Steven |
| 3 | John |
+----+--------+您可以对每个结果人员重复此过程,直到没有结果为止(没有人被拖欠)。
https://stackoverflow.com/questions/22978579
复制相似问题