Выбор из базы последовательности чисел

Tsatur

Новичок
Здравствуйте! Интересует, как можно решить следующую задачу.
Имеется база данных с 50 000 строками. В таблице 2 колонки: id и count. В id содержатся уникальные номера строк, в count - числа. Имеется массив из 10 чисел.
Необходимо найти последовательность чисел из массива в БД в том порядке, в котором они расположены в массиве.
Заранее благодарю.
 

~WR~

Новичок
Mysql:
PHP:
SELECT id, count
FROM table
WHERE count IN (5,6,7,8,9,0,1,2,3,4)
ORDER BY FIND_IN_SET(count, '5,6,7,8,9,0,1,2,3,4')
PG:
PHP:
SELECT id, count
FROM table
WHERE count = ANY '{5,6,7,8,9,0,1,2,3,4}'
ORDER BY idx('{5,6,7,8,9,0,1,2,3,4'}, count)
 

~WR~

Новичок
Если записей ожидается много, то в PG можно красиво схитрить с функциональным индексом.
И получить индекс, который сразу отсортирован в нужном порядке и готов к merge join'ам.
 

craz

Нестандартное звание
У нас прям день ностальгии) приходят все кто 3-4-5 лет назад зарегались спрашивают хню и ждут Фаната)

И я спрошу, уж если на то пошло,

Есть 100 чисел одно из них простое, как узнать дату рождение собаки пользователя зарегистрированного через фейсбук из Бангладеша, если его локаль это идиш?
 

Tsatur

Новичок
У нас прям день ностальгии) приходят все кто 3-4-5 лет назад зарегались спрашивают хню и ждут Фаната)

И я спрошу, уж если на то пошло,

Есть 100 чисел одно из них простое, как узнать дату рождение собаки пользователя зарегистрированного через фейсбук из Бангладеша, если его локаль это идиш?
Вот не пойму, зачем чушь писать. Не считаешь вопрос достойным своего внимания, выйди и не пиши ничего.
 

Фанат

oncle terrible
Команда форума
А что могло поменяться?
"Я упростил вопрос до бессмысленного" что три года назад, что сейчас означает "изобретаю велосипед в темноте задними ногами наощупь, требуется квалифицированная помощь".
 
  • Like
Реакции: craz

craz

Нестандартное звание
О... все ясно, а по фотке вы выглядите достаточно взрослым. Разговор окончен.
был бы я блин один, который не видит в вопросе вопроса
был бы я поклонником Фаната, а такие есть)
был бы короче разговор, который нужно заканчивать

И ваще это пхпклаб тут если ты задаешь не правильный вопрос, то телепатие занимается Фанат, если он не хочет, то задай вопрос нормально, разве не так?

Так чуточку взрослей?
 

Tsatur

Новичок
Есть база данных со столбцами id, count. id - последовательные номера строк от 1 и далее. В count записаны числа. Например, 1,2,5,4,8,6,8,3,5,2,1,4,5,8,2,5,6,7.
Имеетс массив $a состоящий из элементов 3, 5, 2. Нужно проверить наличие последовательности элементов массива в БД и вернуть id первого элемента. В нашем примере ответ должен быть 8, так как последовательность 3 , 5, 2 имеется в БД и начинается с числа 3 имеющего id=8.
 

WMix

герр M:)ller
Партнер клуба
Tsatur
в твоем случае нужна проекция нескольких последовательных строк и последующая селекция результата
(если можно так по русски сказать)
 

WMix

герр M:)ller
Партнер клуба
а что не понятно?
Код:
1
2
3
4
превратить в
Код:
1,2,3
2,3,4
3,4.null
4,null,null
что называется проекцией данных
делается это self_join'ом
ну а далее select
 

~WR~

Новичок
Не нужен здесь self-join, и никак это не называется.

PHP:
SELECT CASE WHEN count(*) = 3 THEN min(CASE WHEN count=10 THEN id END) END
FROM table
WHERE count IN (10,15,20)
В первое условие, вместо 3, подставляем размер массива.
Во второе условие, вместо 10, подставляем значение первого элемента.
В WHERE ... IN подставляем нашу последовательность.

Если найдена вся последовательность, то вернет id первого элемента.
Если не вся, то Null.
 
Сверху