MySql: индексный цикл

0

проблема
У меня есть таблица MySql с x строк, где каждая строка является уникальным идентификатором. Я хочу дать каждому из моих пользователей кусок из 10 строк. Когда пользователь читает содержимое каждой строки, он нажимает "Далее", и я возвращаю ему следующий фрагмент из 10 строк (WHERE Id BETWEEN StartIndex AND StartIndex + 9). Это отлично работает, пока кусок не перекрывает таблицу. Как я могу начать работу с самого начала?

Мое (не очень большое) решение
Получение итогового счета:

$result = $connection->query("SELECT count(Id) AS num_rows FROM Uris");
$count = $result->fetch_assoc()["num_rows"];

А затем некоторая if-logic, чтобы проверить, перекрывается ли она (псевдокод):

if (StartIndex + 10 >= count)
   makeTwoMySqlCalls(BETWEEN StartIndex AND count-1, BETWEEN 0 AND 10-count-StartIndex)

Есть ли лучший (более быстрый) способ сделать это?

PS: Извините за титул, не знаю, как назвать эту проблему.

  • 1
    это не правильная структура БД. Вместо этого создайте две таблицы user и user_data. в user_data вы можете добавить как можно больше строк для каждого пользователя, а во время извлечения данных вы можете использовать запрос JOIN для получения записи
  • 1
    использовать смещение. select * from uris limit 10 offset 0; первый раз, смещение 10 в следующий раз. просто передайте page вар. $offset = (10 * $page) - 10; Например, страница 2 будет 2 * 10 (20 записей), - 10 (что дает смещение 10)
Показать ещё 1 комментарий
Теги:

1 ответ

0

Используйте предложение LIMIT:

SELECT * FROM the_table WHERE 'id' >= start_id LIMIT 10

Это позволит получить до 10 строк, начиная с id со значением start_id.

Вам нужно поместить start_id в качестве значения в запрос, используйте подготовленный оператор.

Подсчитайте строки, которые вы получите, если они меньше 10, вы дошли до последней страницы.

Если они равны 0, вы достигли последней страницы на предыдущей итерации.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню