Индекс записи в отсортированных отношениях - PullRequest
1 голос
/ 23 мая 2011

Учитывая, что у меня есть отсортированное отношение (возможно, сделанное

  SELECT id 
    FROM model 
   WHERE type = 'a' 
ORDER BY name`

...), теперь я хочу быстро получить индекс конкретной записи например, идентификатор записи # 15003 ,

Как мне это сделать в MySql [я являюсь разработчиком Rails]?

Ответы [ 2 ]

2 голосов
/ 23 мая 2011

Предполагая, что под индексом вы подразумеваете номер строки. То есть, если результаты возвращаются «1, 7, 9, ...», тогда «индекс 9» равен 3, это третья строка.

Вам нужны так называемые «оконные функции» или «статистические функции», например row_number ().

MySQL не имеет их. К сожалению.

Однако, хотя я не разработчик RAILS, я должен предположить, что вы можете получить результаты в массиве, выполнить поиск в массиве и вернуть индексный номер?

РЕДАКТИРОВАТЬ : На основании вашего комментария к ответу Брэда, если вы делаете это для разбивки на страницы, посмотрите на LIMIT и OFFSET. http://dev.mysql.com/doc/refman/5.0/en/select.html

0 голосов
/ 23 мая 2011

Вы ищете что-то вроде этого: http://www.xaprb.com/blog/2006/12/02/how-to-number-rows-in-mysql/

Я полагаю, что для этого потребуется отобрать все результаты до желаемого результата.Итак, если ваша запись имеет индекс 15003, вы должны выбрать записи 1-15003.Очевидно, что это не эффективно и не масштабируется ... Возможно, есть лучший способ решения проблемы?Зачем вам нужен индекс в любом случае?Почему бы не поместить более ограничительное условие WHERE в исходный SQL?

...