SQL排序链表

时间:2018-10-07 04:13:45

标签: mysql sql mysqli

我在一个表中有一个SQL链表。我需要一个查询,该查询将返回使用previous_item_id排序的所有行,以获取上一行并正确排序链接列表。此SQL查询将在PHP中使用。

*注意:我正在尝试对链接列表进行排序,而不是简单地按previous_item_id进行排序。所以不是这样:

SELECT * FROM $table_name ORDER BY previous_item_id  

我是SQL查询的新手,请帮忙:)

表格:

ID        EMAIL              PREVIOUS_ITEM_ID
1         test@gmail.com     NULL
2         test2@gmail.com    1
3         test3@gmail.com    4
4         test4@gmail.com    2
5         test5@gmail.com    3

排序后的行应返回:

test@gmail.com
test2@gmail.com
test4@gmail.com
test3@gmail.com
test5@gmail.com

2 个答案:

答案 0 :(得分:0)

如果您的数据始终是4个字符后的数字,请尝试以下操作 使用SUBSTRING_INDEX和子字符串查找数字,然后订购

SELECT * FROM $table_name
order by  substring( SUBSTRING_INDEX(email, '@', 1),5,5)

示例

with t1 as
(
select 'test2@gmail.com' as email
union all
select 'test1@gmail.com'
)select * from t1 order by substring( SUBSTRING_INDEX(email, '@', 1),5,5) 

   email
test1@gmail.com
test2@gmail.com

答案 1 :(得分:0)

我认为我很想在前端代码中解决此问题,不确定使用哪种语言,而是使用伪代码:

LinkedList a = new LinkedList
ListNode n = a
result = query(‘select * from table where prev is null”)
while result.hasrows
    n.data = result.email
    result = query(‘select * from table where prev =‘ + result.id)
    if result.hasrows
        n.nextnode = new Node
        n = n.nextnode
    end if
end while

如果您决定在MySQL中进行操作,那么将其作为存储过程进行处理可能是最干净,最可维护的。在我在问题中的评论中链接的SO页中,您会找到一个示例