LiveKillers
Новичок
Как правильно хранить данные?
Ситуация следующая:
- есть несколько таблиц, из которых осуществляется выборка.
- результаты выводятся в таблицу, в которой каждая строка - ссылка.
- по ссылке выдаётся некая информация, которая снова берётся из нескольких таблиц.
[выборка параметров] -> [вывод основной таблицы] -> [вывод расширенной информации]
Иными словами, мы имеем некоторый набор уникальных id, по которым можно получить информацию.
Так вот, задача такова:
нужно сохранить весь этот набор id. Проблема в том, что их слишком много, порой доходит до 100 000 уникальных id.
Я храню их в виде массива в сессии в следующем виде:
порядковый номер => id
(1 => 20784, 2 => 101989, 3 => 2345, ...., 29000 => 34567)
Этим достигается возможность легко определить предыдущий id и следующий (то есть сделать элементарные ссылки "Назад" и "Вперёд", поскольку расширенная информация выдаётся в отдельном окне).
Вполне возможно, что предыдущий и следующий id можно получить из запроса, если его текст сохранить (запросы различаются в зависимости от параметров).
Однако так как допускается произвольная сортировка данных (а не только прямая и обратная) то выяснить предыдущий и следующий id отдельными двумя запросами мне не представляется возможным.
И, к тому же, выборка как только двух, и тем более, всех id занимает весьма продолжительное время. Поэтому производится генерация массива один раз при выводе заглавной таблицы.
Ну и вопрос: Правильно ли я храню набор id, или есть другой более правильный или рациональный способ?
И второй вопрос: существует ли возможность по запросу типа
SELECT <fields_list> FROM <tables_list> WHERE <conditions> ORDER BY (field)
узнать предыдущий и следующие id не прибегая к полной выборке, если известен текущий id?
P/S Под id понимается число типа INT из поля с параметром auto_increment, поле является первичным ключом
Ситуация следующая:
- есть несколько таблиц, из которых осуществляется выборка.
- результаты выводятся в таблицу, в которой каждая строка - ссылка.
- по ссылке выдаётся некая информация, которая снова берётся из нескольких таблиц.
[выборка параметров] -> [вывод основной таблицы] -> [вывод расширенной информации]
Иными словами, мы имеем некоторый набор уникальных id, по которым можно получить информацию.
Так вот, задача такова:
нужно сохранить весь этот набор id. Проблема в том, что их слишком много, порой доходит до 100 000 уникальных id.
Я храню их в виде массива в сессии в следующем виде:
порядковый номер => id
(1 => 20784, 2 => 101989, 3 => 2345, ...., 29000 => 34567)
Этим достигается возможность легко определить предыдущий id и следующий (то есть сделать элементарные ссылки "Назад" и "Вперёд", поскольку расширенная информация выдаётся в отдельном окне).
Вполне возможно, что предыдущий и следующий id можно получить из запроса, если его текст сохранить (запросы различаются в зависимости от параметров).
Однако так как допускается произвольная сортировка данных (а не только прямая и обратная) то выяснить предыдущий и следующий id отдельными двумя запросами мне не представляется возможным.
И, к тому же, выборка как только двух, и тем более, всех id занимает весьма продолжительное время. Поэтому производится генерация массива один раз при выводе заглавной таблицы.
Ну и вопрос: Правильно ли я храню набор id, или есть другой более правильный или рациональный способ?
И второй вопрос: существует ли возможность по запросу типа
SELECT <fields_list> FROM <tables_list> WHERE <conditions> ORDER BY (field)
узнать предыдущий и следующие id не прибегая к полной выборке, если известен текущий id?
P/S Под id понимается число типа INT из поля с параметром auto_increment, поле является первичным ключом
