$bookmarks = $db->query("SELECT * FROM entries");
foreach ($bookmarks as $bookmarks) {
...
get_category_by_id()
get_book_by_id()
...
}
Предположим, у вас в базе 100 закладок. Тогда вы первым запросом вытаскиваете их все, а потом запускаете перебор (foreach) и для КАЖДОЙ закладки делаете get_category_by_id() и get_book_by_id().
В итоге у вас 201 запрос. Сервер не умер, скорее всего, но ему уже поплохело.
Если закладок будет несколько тысяч - сдохнет (или прибъет этот запрос по таймауту, например).
Все это можно заменить на один запрос с join-ами (
рандомный гайд), чтобы сразу получить закладки с категорией и книгой.
И можно не выбирать
select *
а указать limit и offset (
рандомный гайд).
В итоге выборка с пагинацией выглядит как-то так:
select что-то-там from таблица
left join другая-таблица on что-то-там
left join еще-таблица on что-то-там
limit 10 -- десять записей
offset 30 -- после тридцатой
то есть будут выбраны записи с 31 по 40