2010-05-27 34 views
2

我正在使用MySQL。我有一张桌子这可以通过单个SQL查询来完成

Type SubType 
1 1 
1 5 
1 6 
1 8 
2 2 
2 3 
3 1 
3 2 
3 3 

对于每种类型都有一些子类型。对于一个类型的每个子类型有在未来的类型相应的亚型:

(1,1) => (2,2) 
(1,5) => (2,3) 
(1,6) => (2,2) 
(1,8) => (2,3) 
(2,2) => (3,1) 
(2,3) => (3,2) 

如果你还没有看到的模式,那就是:你当前和未来类型的亚型,在随后进行排序下一个类型你在当前类型的当前子类型的相同位置获得子类型。如果在当前类型中有更多的子类型在下一个子类型中,那么您会在下一个类型中翘曲并从第一个子类型开始。

是否有可能构造一个查询,该查询采用当前类型和子类型,并在下一个类型中返回相应的子类型?

+0

你想亚型总是按升序排列? – 2010-05-27 23:52:17

+0

是的,子类型应该总是排序。将所有数据提供给客户端并在那里处理并不是一个可行的解决方案,因为它太多了。 我已经实现了一个简单的php解决方案,可以执行4个查询。它的工作,但我虽然也许有一种方法可以避免不必要的来回发送数据。 – Ghostrider 2010-05-28 15:33:23

回答

0

不确定关于mysql ...在oracle中有LEAD和LAG函数,以及CONNECT BY。

我有点通过你的描述感到困惑我必须说:)

0

有可能是某种方式与查询要做到这一点,但我认为你会是一个更好的主意,建立一个数据结构该表然后在那里做你的查找。我正在考虑的MySQL查询将涉及从子查询,模算术等获得计数。最终结果将是一个混乱的查询!相反,如果你有这样的事情:

在简陋的Python:

>>> x = [None, [1, 5, 6, 8], [2, 3], [1, 2, 3]] 
>>> for i in range(1,3): 
... for j in range(len(x[i])): 
...  k = j % len(x[i+1]) 
...  print(i,x[i][j],i+1,x[i+1][k]) 
... 
1 1 2 2 
1 5 2 3 
1 6 2 2 
1 8 2 3 
2 2 3 1 
2 3 3 2 
相关问题