Автор Тема: постраничный вывод данных из разных таблиц  (Прочитано 9576 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн UltraMax

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.dinamo-minsk.org
Просмотрел поиск - так ничего для себя нужного не нашел, слишком в поиске все просто :)
Итак такая беда.
Надо делать вывод из 5 таблиц в MySQL
Вывод каждой записи из таблицы, оформляется по разному. То есть все то что из первой таблицы нашлось, оформляется одним способом, из второй, вторым и так все 5 штук..
Вывод я сделал, но нужно выводить не более чем 20 записей из всех таблиц на одну страницу. Внимание вопрос - как это сделать? Сначала я пытался делать все одним запросом, не получилось, так как я не придумал, как можно понять какая запись к какой таблице относится, и оформлять ее соотвествующим только ей html кодом. Сделал 5 запросов, тут все ок, но как ограничить вывод ВСЕХ записей 20 штуками???  Как не бился, не могу придумать алгоритм выдергивания. Может можно все 5 результатов объеденить в массив, и уже из него по 20 выводить? Может кто подскажет технологию данного вывода, бо сам я далеко не профи в PHP? Через один запрос делать (как?) или через 5 отдельных(тут вообще не могу догадаться как).
Заранее спасибо всем, кто сможет помочь :) Очень блин надо :)

Оффлайн Wyclef

  • hello_worlder
  • Старожил
  • ****
  • Сообщений: 307
  • +0/-0
  • 2
    • Просмотр профиля
    • http://thug.narod.ru
Если просто 20-ю записями ограничить, то в каждом select\'e "... LIMIT от, до". (4x5)

А если допустим в одной таблице не нашлось ничего? Какой принцип у тебя?
It\'s nice to be important, but it\'s more important to be nice!

Оффлайн UltraMax

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.dinamo-minsk.org
У меня стоит проверка, если во всех 5 таблицах ничего нет, пишет что пусто.
Главное - чтобы хоть что-то было. Пусть даже в четырех ничего не будет, но если в одной будет - будет из нее выводить.
Что значит ограничить 20-ую? Я и хочу ограничить 20-ую! Или ты имеешь ввиду в каждом запросе? Ну хорошо,ограничил я в каждом запросе по 20. А всего нашло 20 в одной (причем реально их допусти 44), 7 в другой, и 4 в третей. И как мне это разбивая по 20 ОБЩИЙ(!!!) итог (то есть 44+7+4=55) вывести? Вот что интересует. :)
Я вот задумался - может лучше выводить сначала из одной? Как только в ней все повыводить, начинать искать в другой? Только что-то я себе это не очень представляю. Запихнуть в цикл, и пока первую таблицу не разберет, не переходить к другим???. Брр, мне аж страшно стало :)

Оффлайн NAS

  • Неопытный юзер
  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2951
  • +1/-0
  • 1
    • Просмотр профиля
    • http://nhouse.ru
А если вначале все запихнуть в HEAP Tables, а уж из нее выводить.

Оффлайн Enemy

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 204
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.lutsiv.com
круто. это самый лучший выход из ситуации.
Life is Good

Оффлайн Enemy

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 204
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.lutsiv.com
а как на счет - http://www.mysql.com/doc/en/MERGE.html обедененных таблиц? и что лучше в данной ситуации?
Life is Good

Оффлайн UltraMax

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.dinamo-minsk.org
Стоп граждане, но что толку от временных таблиц, мне же надо записи из рахзных таблиц по раному обрабатывать. Как вариант - можно в каждую запись передавать параметр навзания таблицы например (тут я уж придумаю что-либо), но вот начал рассматривать Insert ... Select - и не могу найти понять, можно ли втсавлять во врменную таблицу (хоть какую) данные из selecta если там всего три поля, а четвертое надо вставлят самому? Можно ли так сделать? Если да - может можно пример как?

Оффлайн NAS

  • Неопытный юзер
  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2951
  • +1/-0
  • 1
    • Просмотр профиля
    • http://nhouse.ru
Цитировать
UltraMax:
Стоп граждане, но что толку от временных таблиц, мне же надо записи из рахзных таблиц по раному обрабатывать.

Обработай приведи к единому знаменателю и во временную таблицу.

А вообще не плохо бы знать структуру БД.

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
SELECT \'tab_name\', field1, field2 FROM tab_name;
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн UltraMax

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.dinamo-minsk.org
Макс ... или я сошла с ума, или меня не понимают :)
повторяю - есть таблица, назовем ее tmp, в ней 4 поля. Три поля заполняются данными из других таблиц, но 4=ое я вставляю сам! 4-го поля нет в таблицах, из которых берутся данные!!!
Как Insert ... Select тут употребить?
INSERT INTO tmp (first,second,third) SELECT a,b,c FROM TITLE WHERE  тряляля и вот как судя вставить 4-ое значение?
Свое? Не из таблицы, с свое? Синтаксис господа - синтаксис. И можно ли так вообще

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
я тебе и показал синтаксис SELECT-а.

INSERT INTO tmp (first,second,third,fourth) SELECT a,b,c,\'title\' FROM TITLE WHERE ля ляля ля

особое внимание прошу обратить  на поле fourth в INSERT-е и \'title\' (кавычки обязательны) в SELECT-е
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Wyclef

  • hello_worlder
  • Старожил
  • ****
  • Сообщений: 307
  • +0/-0
  • 2
    • Просмотр профиля
    • http://thug.narod.ru
UltraMax
Т.е. как я понял кол-во записей в каждом предыдущем запросе зависит от результата в последующих... Как мне кажется это несколько не правильная логика, надо хотя бы определить минимальное кол-во возвращенных записей независимо от результатов последующих запросов...

Сам посотри как ты хочешь: Чтобы вывести n-ое кол-во записей ты допустм 1-го запроса ты должен знать вернут ли тебе что-нибудь 4 последующих, а их надо сначала посчитать (как мне видится дополнительные запросы неизбежны, но правомертны ли)

Может есть смысл пересмотреть идеологию вывода...

Скажи хотя бы для чего ты хочешь это реализовать? Пример работающего аналога? Может, что более путнее посоветуют...
It\'s nice to be important, but it\'s more important to be nice!

Оффлайн UltraMax

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.dinamo-minsk.org
Wyclef, да я уже все сделал
На основании верменных таблиц.
Повторяю - у меня было 5 таблиц. Из них нуно было выдернуть записи. Но группа записей каждой таблицы оборачивалась своим html кодом. А общий вывод надо было делать постранично, 20 записей максимум. Поэтому общий SELECT не проходил, ведь потом бы невозможно было разобрать какую запись, как именно парсить.
Для этого было сделано 5 отдельных INSERT с SELECT-ами, во временную таблицу, и одновременно в каждом Insert ... SELECT шел свой параметр, уникальный для каждый таблицы. Вот и получилось, чт была таблица со всеми необходимыми записями, но у каждой был свой прихнак как ее оборачивать
Ну а уж из одной таблицы грешно не сделать постраничный вовод на основе LIMIT ;)
Вроде все объяснил.
Огромное спасибо Максу за разъяснение ка квставить свой параметр в Insert ... SELECT
Да и всем тоже спасибо.
Ура товарищи :)

Оффлайн Wyclef

  • hello_worlder
  • Старожил
  • ****
  • Сообщений: 307
  • +0/-0
  • 2
    • Просмотр профиля
    • http://thug.narod.ru
UltraMax
Одобрямс, молодчик :)
It\'s nice to be important, but it\'s more important to be nice!

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
вообще-то я не вижу большой разницы между организацией такого массива в мускуле и в РНР.
Ну, разве что, у мускуля памяти больше.

Зависит от размера таблиц, но я бы все-таки, сделал пару шагов в сторону оптимизации - к примеру, собирал бы во временную таблицу не целиком записи, а айдишники таблиц и записей.
а уж сделать потом на странице 1-4 селекта для полных записей - не проблема.

И еще. Здесь весь поиск делается, как я понимаю, при обращении к каждой странице.
Лично я бы сделал нормальную, не временную таблицу, в которую бы собирал результат запроса. (те же айдишники)
а потом кроном бы чистил.

а за грубость извиняюсь.
посмотрел повнимательнее - да, действительно, ту фразу можно толковать довояко.
но я, правда, в тебе не ошибся - это видно по последовавшим комментариям ;-)

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28