Связанный список сортировки SQL - PullRequest
0 голосов
/ 07 октября 2018

У меня есть связанный список 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 голосов
/ 10 октября 2018

Я думаю, что у меня возникнет соблазн решить эту проблему в коде переднего плана, не зная, на каком языке вы работаете, но используя псевдокод:

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, на которую я ссылался в своем комментарии в вопросе

0 голосов
/ 07 октября 2018

Попробуйте, как показано ниже, если ваши данные всегда числа после 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...