我在一个表中有一个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
答案 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页中,您会找到一个示例