2010-10-22 2 views
1

Я показываю список.mysql извлекает предыдущий или следующий порядок записи по имени другого имени, а не по порядку по id

Пользователь может редактировать любой предмет.

Я показываю следующие предыдущие кнопки, которые при нажатии на нее динамически извлекают следующую предыдущую запись db. нет перезагрузки страницы.

Это хорошо работает с идентификатором. как how can i get next and previous field id with php from mysqlиMySQL next/previous ids (arbitrary sort order)

В настоящее время я отображая как

выберите * из таблицы заказа по названию возрастанию

и на следующий и предыдущий я использовал, как это ...

select * from table where id > $id order by name asc limit 1 
select * from table where id < $id order by name desc limit 1 

выше, что я получил, когда искал в Интернете.

в этом порядке идентификатор не будет в заказе, поэтому я не могу использовать id для получения следующей и предыдущей записи, я так думаю.

Я хочу получить следующую и предыдущую записи в отношении любого другого поля, а не идентификатора.

так что-то вроде этого.

выберите * из таблицы, где ID> 5 порядок по названию возрастанию или по убыванию предела 1.

, что бы запрос?

Примечание

Есть 15000 записей. который по умолчанию заполнен наполовину. оставшаяся половина должна быть обновлена ​​администратором. поэтому вместо перезагрузки страницы после того, как администратор обновил одну запись, я забираю другую и динамически показываю на экране, чтобы он мог продолжать обновлять контент. там не будет перезагрузки страницы. он просто нажимает кнопку «Обновить», и появляется следующая запись. он может выбрать предыдущую или следующую кнопку для перемещения между записями.

+0

выбрать * из таблицы где id> 5 порядок по названию asc или desc limit 1. должен работать, учитывая, что вы используете asc или desc, а не оба. – Claudiu

+0

№. он работает, но не так, как ожидалось. да или в цитированном тексте, а не как код, поэтому я использовал его только для указания. –

ответ

4

Вам нужно фильтровать по значению имени:

SELECT * FROM `table` 
WHERE name < 'Foo' 
ORDER by name DESC 
LIMIT 1 

это работает только, если имена являются уникальными. Если могут быть дубликаты, вам нужен тай-брейк. Вы можете, например, использовать столбец id для тай-брейка.

SELECT * FROM `table` 
WHERE name < 'Foo' OR (name = 'Foo' AND id < 42) 
ORDER by name DESC, id DESC 
LIMIT 1 
+0

Пожалуйста, избегайте $ name :( – Simon

+0

Согласен, привязка - лучший подход и по сути разумная побега. – Simon

+0

Мое мнение состояло в том, что ваш исходный ответ имел $ name в SQL без указания того, что еще нужно сделать. – Simon

0

Вы лучше делаете больше разбивки на страницы.

$itemsPerPage = 10; 

$page = (int)$_GET['page']; // do more validation to check this is a valid integer 

$start = ($page * $itemsPerPage) - $itemsPerPage; 

$sql = "SELECT * FROM `table`WHERE name < ? ORDER by name DESC limit $start, $itemsPerPage"; 
+0

№. есть 15000 записей. который по умолчанию заполнен наполовину. оставшаяся половина должна быть обновлена ​​администратором. поэтому вместо перезагрузки страницы после того, как администратор обновил одну запись, я забираю другую и динамически показываю на экране, чтобы он мог продолжать обновлять контент. там не будет перезагрузки страницы. он просто нажимает кнопку «Обновить», и появляется следующая запись. он может выбрать предыдущую или следующую кнопку для перемещения между записями. –

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