2013-12-17 1 views
0

Вот что я пытаюсь сделать. У меня есть PHP-код, который выходит и получает запись из таблицы базы данных.Как получить порядковое положение записи, возвращенной mysql_query

Это сообщение было отмечено как дублируемое, поэтому я попробовал ответить на With MySQL, how can I generate a column containing the record index in a table? и, как ожидалось, дал мне порядковое положение 1, когда порядковое положение записи на самом деле - 19782. Эта ссылка дает номер строки на основе возвращенных результатов , мой вопрос отличается тем, что я просматриваю порядковое положение единственной возвращенной записи, основанной на всей таблице. Который я дважды заявлял в оригинальной записи.

$query-'SELECT * FROM ' . $datafile . ' WHERE ' . $seekindex . ' = "' $seekdata . '" ORDER BY ' . $fieldname; 

Где: файл данных любой действительный таблицы из текущей открытой базы данных. seekindex - любое имя столбца из таблицы. seekdata предоставляется пользователем. имя_файла - любое имя столбца из таблицы.

Запрос работает нормально и возвращает записи (ы), которые он запросил, чтобы вернуться. Я хотел бы знать порядковое положение этой записи в файле данных, если все записи были выбраны упорядочиванием по имени поля. Мне нужно прокрутить вниз от 1 до 10 записей при заказе по имени поля. Тогда я мог бы использовать простой запрос, такие как:

$rn=mysql_result($result, 0, 'rownum'); // or what ever would give me the ordinal position. 
$rn10=$rn+10; 
$query='SELECT * FROM ' . $datafile . ' ORDER BY ' . $fieldname . ' LIMIT ' $rn .','. $rn10; 

Там может быть более чем одна запись, которая соответствует исходный запрос, Хорошим примером может быть почтовый индекс таблицы, где пользователь может искать молнию на город рядом с ними, и они набирают их и хотят прокрутить вниз, пока они не найдут город, который они ищут. Если есть 20 записей, которые соответствуют тем же критериям, и я получаю следующие 10 записей, я никогда не буду двигаться, если я просто использую.

$query-'SELECT * FROM ' . $datafile . ' WHERE ' . $seekindex . ' >= "' $seekdata . '" ORDER BY ' . $fieldname . ' LIMIT 1,11; 

Кроме того, может быть уникальное поле или идентификатор в таблице. Я всегда использую их, но в этом случае я не был создателем таблиц.

Я попытался получить все записи и отсортировать до тех пор, пока не найду тот, который я выбрал, но некоторые из кандидатов для файла данных имеют более 200 тыс. Записей, что стало непрактичным для динамического поиска, ожидая более двух минут для страницы вниз для вступления в силу.

Есть ли способ получить порядковое положение одной записи на основе всех записей для данного ORDER BY? Или есть другой способ, который я не вижу, потому что я так настроен сделать эту работу? Заранее спасибо.

+0

Почему вы не используете 'LIMIT 0, 10' в первый раз,' LIMIT 10, 10' второй раз и т. Д.? – Barmar

+0

Бармар, я могу начинать посередине стола. например, пользователь ставит почтовый индекс 34543, это будет отправной точкой. Я бы использовал позицию оттуда. Думаю, я мог бы произвольно установить это значение в ноль и использовать> = или <= и ограничить 0,10. ASC или DESC. – TR0712

+0

Где этот вопрос задавали и отвечали раньше. Я искал достаточно времени, чтобы найти ответ. – TR0712

ответ

0

Вы можете сделать свой собственный порядковый номер довольно легко

$counter = 0; 
while($row = mysql_fetch_assoc($result)) { 
    // Do your stuff here 
    $counter++; 
} 

Это практично для таких вещей, как mysql_data_seek, где вы должны обеспечить положение записи.

Последнее, но не менее важное: прекратите использование mysql_query и связанных с ним функций. Это depreciated.

Смежные вопросы