|
Постраничный вывод данных из нескольких таблиц
|
|||
---|---|---|---|
#18+
Есть несколько таблиц (для простоты возьмем две). Производится поиск. По умолчанию, если не указано другое, поиск производится по всем таблицам на совпадение. Необходимо результаты поиска выводить постранично. В случае одной таблицы проблем никаких. Здесь великолепно справляется LIMIT. Но вот вопрос: как вывести постранично данные сначала из одной таблицы, потом из другой, и, в случае большего количества таблиц, так далее. Приведу пример. Допустим есть две таблицы (синтаксис описания абстрактный) tabl1 ( id int ..., text varchar(255) ) tabl2 ( id int ..., text varchar(255) ) Поиск по текстовым полям дал 23 записи из первой таблицы и 12 из второй. На странице решено выводить по 10 записей. Сначала необходимо показать данные из первой таблицы, затем из второй. Для первой таблицы использование LIMIT offset, rows оправдывает себя. Но как применить его для второй, т.к. на первой и второй страницах данные из второй таблицы не будут показаны вообще, на третьей лишь частично (7 записей), а на четвертой - оставшиеся 5. UNION, который позволил бы решить проблему не предлагать. Т.к. он появился лишь в 4.0.0, а провайдер использует 3.23.58. Временные таблицы тоже не очень интересны, т.к. существуют лишь в пределах времени жизни соединения с БД, которое закрывается при окончании работы скрипта. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2003, 05:43 |
|
Постраничный вывод данных из нескольких таблиц
|
|||
---|---|---|---|
#18+
можно подумать решение чтоб выводить несколько записий из таб1 и несколько из таб2 чтоб в суме было 10.... алгорит примерно такой... -считаем общее кол во записей 23+12=35 -делим на 10 получаем 3,5 то есть будем иметь три полных страници и одну не всю... -кол во записей табл1 делим на число страниц 23/4=5,75 -на каждой(кроме последней) странице показываем 6 записей из табл1 и 10-6=4 из табл2 -на последней остатки... нужно только подумать куда лучше округлять... этот вариант если можна показывать вперемешку конечно.... Felix ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2003, 13:03 |
|
Постраничный вывод данных из нескольких таблиц
|
|||
---|---|---|---|
#18+
перечитал Ваш пост... очевидно нельзя вперемешку... тогда отслеживайте кол во записей на последней странице для табл1 то есть там где их будет 3... и потом дополняйте 7-ю записями из табл2 я как бы и проблемы не вижу.... просто будет LIMIT n,m где м,н будет в зависимости от страници.... Felix ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2003, 13:09 |
|
Постраничный вывод данных из нескольких таблиц
|
|||
---|---|---|---|
#18+
Если не затруднит, можно примерчик чиркнуть как это будет выглядеть с использованием LIMIT? Если имеется в виду, что сначала производить манипуляции с вычислением сначала смещения и количества строк для одной таблицы, затем для второй, и т.д., то это не выход. С увеличением числа таблиц увеличится нагроможденность и усложнится логика. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2003, 14:32 |
|
Постраничный вывод данных из нескольких таблиц
|
|||
---|---|---|---|
#18+
соглачен насчет логики.. будет громоздко.... но если нет другого выхода то нужно думать в ето сторону.... (будет время я прикину...) а почему не вариант с временной таблицей....??? забрасывать все туда а потом выводить... Временные таблицы тоже не очень интересны, т.к. существуют лишь в пределах времени жизни соединения с БД, которое закрывается при окончании работы скрипта. а больше ей жить и не нужно..... Felix ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2003, 15:51 |
|
Постраничный вывод данных из нескольких таблиц
|
|||
---|---|---|---|
#18+
такая проблема обычно свидетельствует о неправильной организции данных. Измени структуру БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2003, 20:21 |
|
Постраничный вывод данных из нескольких таблиц
|
|||
---|---|---|---|
#18+
2@Felix Если Вы имеете в виду, что каждый раз при выполнении скрипта производить поиск без ограничений, запихивать все во времянку, а затем в зависимости от страницы выводить результаты, то я уже думал об этом. Не очень нравится сам подход. Но как вариант использовать можно. Мне же нравится другой способ использования временных таблиц (он очевиден): при нажатии на кнопку "Найти" производить один раз поиск с условиями и запихивать все во временную таблицу. А затем при навигации по страницам выбирать просто уже из нее простым использованием LIMIT. 2Макс М Со структурой все в порядке. То, что приведено в примере и приведено для примера. В действительности таблицы имеют из общего только текстовые поля, по которым и производится поиск. В остальном они различны . Одна из таблиц является master'ом для другой. Соотношение один ко многим. Не в этом дело. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2003, 05:39 |
|
|
start [/forum/topic.php?fid=47&msg=32314257&tid=1855651]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
81ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 355ms |
total: | 533ms |
0 / 0 |