我有一张这样的桌子..
Categories table
-------------------
ID Cat_Name
1 cat1
2 cat2
3 cat3
Stations table
------------------
ID Sta_Name Cat_ID
1 sta1 1
2 sta2 3
3 sta3 2
4 sta4 1
5 sta5 1
6 sta6 3
现在我需要将唯一ID输入为1(即第一行第一列),所以现在我想要输出4
因为该类别中的下一个项目是4
我认为下一个项目在类别1中得到1,4,6,9 id,所以现在我输入6现在输出必须是9,因为如果我输入输入9,则类别1中6的下一项是9输出必须返回1
答案 0 :(得分:1)
如果我理解一个好的方法会......
仅考虑“电台表”和当前电台ID
-- the one for next station
SELECT MIN(ID) as next FROM `stations` WHERE Cat_ID = {desidered_Cat_ID} AND ID > {your_current_ID} LIMIT 1;
-- the one for previous station
SELECT MAX(ID) as prev FROM `stations` WHERE Cat_ID = {desidered_Cat_ID} AND ID < {your_current_ID} LIMIT 1;
希望这有帮助。
答案 1 :(得分:0)
我不确定“next”的含义,订单是如何确定的。无论如何,这是基本方法:
select t2.ID
from MyTable t1
inner join MyTable t2 on t1.Cat_ID = t2.Cat_ID and t1.ID <> t2.ID
答案 2 :(得分:0)
select t2.id
from mytable t1
inner join mytable t2 on t2.cat_id = t1.cat_id and t2.id > t1.id
limit 1
答案 3 :(得分:0)
与其他人一样有点不清楚.. 1是你想要通过与ID 1相同的类别找到下一个ID的ID(因此ID 4也是相同的Cat_ID 1)?我会试试
select MIN( S2.ID ) as NextID
from
Stations S1
JOIN Stations S2
on S1.Cat_ID = S2.Cat_ID
AND S2.ID > S1.ID
where
S1.ID = IDYouAreInterestedIn
我已重命名表和别名以匹配您的新表编辑...在这种情况下,“S1”和“S2”是“站点”表的“别名”。
Join命令基于表之间的相同类别,但另外,只包括第二个实例中ID大于您开始的ID的记录(在您的情况下,您正在寻找1) ..你不想返回1作为你开始的1条记录的答案。你想要的第一个号码就在你所在的号码之后。
所以,从你最新的样本......
Stations table
------------------
ID Sta_Name Cat_ID
1 sta1 1
2 sta2 3
3 sta3 2
4 sta4 1
5 sta5 1
6 sta6 3
IF you enter The next ID would be
ID = 1 4 (both category 1)
ID = 2 6 (the next instance of category 3)
ID = 3 No record found... no other "2" category
ID = 4 5 (first ID after 4 but same "1" category)
ID = 6 No record since nothing after 6 in the list.