(MySQL) сделать выборку по id в строгом порядке.
От: MasterMind Россия  
Дата: 11.05.15 15:57
Оценка:
Есть выборка id через запрос к сфинксу с весом. Необходимо сохранить очередность id при последующей выборке уже полных данных. К примеру:

select table.* from table where id in (2,6,1,4)


В данном случае выборка будет 1,2,4,6. А нужно, чтобы было именно в очередности от сфинкса — "2,6,1,4". Каким образом это можно сделать?
Re: (MySQL) сделать выборку по id в строгом порядке.
От: wildwind Россия  
Дата: 11.05.15 16:37
Оценка: +2
Здравствуйте, MasterMind, Вы писали:

MM> В данном случае выборка будет 1,2,4,6. А нужно, чтобы было именно в очередности от сфинкса — "2,6,1,4". Каким образом это можно сделать?


Например, вставить их во временную таблицу вместе с весом, затем соединить с исходной.
avalon/1.0.442
Re: (MySQL) сделать выборку по id в строгом порядке.
От: Anton Batenev Россия https://github.com/abbat
Дата: 11.05.15 22:11
Оценка:
Здравствуйте, MasterMind, Вы писали:

MM> Есть выборка id через запрос к сфинксу с весом. Необходимо сохранить очередность id при последующей выборке уже полных данных. К примеру:

MM> В данном случае выборка будет 1,2,4,6. А нужно, чтобы было именно в очередности от сфинкса — "2,6,1,4". Каким образом это можно сделать?

Никак. Нужно получать полный набор данных и вывести в нужном порядке уже на клиентской стороне.
avalon/1.0.442
Re: (MySQL) сделать выборку по id в строгом порядке.
От: Tigor Россия  
Дата: 12.05.15 13:51
Оценка: 4 (1)
Здравствуйте, MasterMind, Вы писали:

Нету под руками MySql, так что не могу проверить.
Там нельзя что-нить подобное написать?

select
    table.* 
from 
    table 
where 
    id in (2,6,1,4) 
order by
    case id 
        when 2 then 1 
        when 6 then 2
        when 1 then 3
        when 4 then 4
    end
К сожалению, в действительности все выглядит иначе, чем на самом деле.
Re[2]: (MySQL) сделать выборку по id в строгом порядке.
От: MasterMind Россия  
Дата: 12.05.15 15:54
Оценка:
Здравствуйте, Tigor, Вы писали:

T>Здравствуйте, MasterMind, Вы писали:


T>Нету под руками MySql, так что не могу проверить.

T>Там нельзя что-нить подобное написать?

T>
T>select
T>    table.* 
T>from 
T>    table 
T>where 
T>    id in (2,6,1,4) 
T>order by
T>    case id 
T>        when 2 then 1 
T>        when 6 then 2
T>        when 1 then 3
T>        when 4 then 4
T>    end
T>


Нет
Re[3]: (MySQL) сделать выборку по id в строгом порядке.
От: DeathKnight Беларусь  
Дата: 12.05.15 20:31
Оценка: 2 (1)
Здравствуйте, MasterMind, Вы писали:

MM>Здравствуйте, Tigor, Вы писали:


T>>Здравствуйте, MasterMind, Вы писали:


T>>Нету под руками MySql, так что не могу проверить.

T>>Там нельзя что-нить подобное написать?

T>>
T>>select
T>>    table.* 
T>>from 
T>>    table 
T>>where 
T>>    id in (2,6,1,4) 
T>>order by
T>>    case id 
T>>        when 2 then 1 
T>>        when 6 then 2
T>>        when 1 then 3
T>>        when 4 then 4
T>>    end
T>>


MM>Нет


но можно же написать что-то вида:
select * from (
    select (case when id = 2 then 1 when 6 then 2 ... end) as ord , table.*
    from table 
    where id in (2,6...)
) as wrappedQ 
order by wrappedQ.ord asc
Re: (MySQL) сделать выборку по id в строгом порядке.
От: evilbloodydemon  
Дата: 13.05.15 05:55
Оценка: 10 (2)
Здравствуйте, MasterMind, Вы писали:

MM>В данном случае выборка будет 1,2,4,6. А нужно, чтобы было именно в очередности от сфинкса — "2,6,1,4". Каким образом это можно сделать?


select * from table where id in (2,6,1,4) order by find_in_set(id, '2,6,1,4')
... << RSDN@Home 1.2.0 alpha 5 rev. 67>>
Re[2]: (MySQL) сделать выборку по id в строгом порядке.
От: MasterMind Россия  
Дата: 14.05.15 07:33
Оценка:
Здравствуйте, evilbloodydemon, Вы писали:

E>Здравствуйте, MasterMind, Вы писали:


MM>>В данном случае выборка будет 1,2,4,6. А нужно, чтобы было именно в очередности от сфинкса — "2,6,1,4". Каким образом это можно сделать?


E>
E>select * from table where id in (2,6,1,4) order by find_in_set(id, '2,6,1,4')
E>


Да, то что нужно, только у Вас там со строками, воспользовался просто field
Re[3]: (MySQL) сделать выборку по id в строгом порядке.
От: MasterZiv СССР  
Дата: 14.05.15 17:03
Оценка: 4 (1)
Здравствуйте, MasterMind, Вы писали:

MM>Здравствуйте, Tigor, Вы писали:


T>>Здравствуйте, MasterMind, Вы писали:


T>>Нету под руками MySql, так что не могу проверить.

T>>Там нельзя что-нить подобное написать?

T>>
T>>select
T>>    table.* 
T>>from 
T>>    table 
T>>where 
T>>    id in (2,6,1,4) 
T>>order by
T>>    case id 
T>>        when 2 then 1 
T>>        when 6 then 2
T>>        when 1 then 3
T>>        when 4 then 4
T>>    end
T>>


MM>Нет


ДА!
В смысле -- можно так написать, и даже нужно.
Re[4]: (MySQL) сделать выборку по id в строгом порядке.
От: MasterMind Россия  
Дата: 14.05.15 19:42
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>Здравствуйте, MasterMind, Вы писали:


MM>>Здравствуйте, Tigor, Вы писали:


T>>>Здравствуйте, MasterMind, Вы писали:


T>>>Нету под руками MySql, так что не могу проверить.

T>>>Там нельзя что-нить подобное написать?

T>>>
T>>>select
T>>>    table.* 
T>>>from 
T>>>    table 
T>>>where 
T>>>    id in (2,6,1,4) 
T>>>order by
T>>>    case id 
T>>>        when 2 then 1 
T>>>        when 6 then 2
T>>>        when 1 then 3
T>>>        when 4 then 4
T>>>    end
T>>>


MM>>Нет


MZ>ДА!

MZ>В смысле -- можно так написать, и даже нужно.

Да, я тогда просто не сразу понял что ордер бу принимает по сути своей функцию, а как она сделана — уже не важно. Минус в этом подходе для меня в том, что такой запрос генерировать сложней, чем просто создать последовательность методом (php) implode(',', $data );
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.