![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| KonstRuctor |
|
||||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 31.3.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: нет |
Есть стандартный вывод новостей.
Таблица news:
У каждой новости может быть один или несколько авторов. Таблица authors:
Таблица "кто что написал": news_authors
Мне нужно получить стандартный вывод новостей в виде: ------------------------------------------------------------ 1 января 2012 :: Вася Пупкин, Мария Коловынова Залоговок новости Текст новости текст новости ------------------------------------------------------------ 31 декабря 2011 и так далее * * * Сейчас я делаю так: 1) Выборка всех новостей
2) Для каждой новости по ее id вынимаю массив с именами авторов, то есть внутри цикла обхода новостей делаю по запросу для каждой новости
В итоге для 10 новостей мне надо сделать 11 запросов. Все работает, но не оптимально. Вопрос: можно ли эту задачу решить одним запросом, получив единый массив всех новостей уже со всеми авторами? Спасибо. |
||||||||||
|
|||||||||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 2 Всего: 71 |
Что-то где-то так
-------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| KonstRuctor |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 31.3.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: нет |
Сделал по вашему примеру.
Вот ято я делал:
Вот что я получил на выходе:
В таблице 5 ностей, 5 авторов, таблица news_authors тоже заполнена каким-то образом. Я получаю только одну новость. Как мне получить массив с перечнем всех новостей, со всеми авторами к каждой новости? Или я чо-то делаю не так? Спасибо! Это сообщение отредактировал(а) KonstRuctor - 5.2.2012, 11:29 Присоединённый файл ( Кол-во скачиваний: 3 )
test.sql 2,54 Kb |
||||
|
|||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 14 Всего: 386 |
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| KonstRuctor |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 31.3.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: нет |
Как правильно сделать, чтобы сработал 1 запрос?
Это сообщение отредактировал(а) KonstRuctor - 5.2.2012, 11:51 |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 14 Всего: 386 |
У меня это запрос вывел 8 строк. C каждым автором... Так и надо?
Добавлено через 1 минуту и 5 секунд Что такое $db - класс из Pear? -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| KonstRuctor |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 31.3.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: нет |
Мне надо на выходе получить перечень новостей (всего их 5)
Для каждой новости надо получить их авторов и вывети на экран. Я понимаю, что я что-то не так делаю, но никак не могу понять, что.... |
|||
|
||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 2 Всего: 71 |
KonstRuctor, прикрепи дамп базы.. я то лень рыбу набивать для теста
-------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| KonstRuctor |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 31.3.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: нет |
Вот что я хочу получить в идеале:
1) Испольщуем мою базу 2) Делаем запрос (здесь $db->query === mysql_query)
И получаем на выходе HTML вывод новостей
Таким образом я мог решить зедачу. Вопрос: можно ли сделать это 1 запросом, получив некий масив и, разобрав его, получить вот такой HTML? |
||||
|
|||||
| $дмитрий |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1037 Регистрация: 19.6.2004 Репутация: 3 Всего: 45 |
Нужно всего 2 запроса: 1. Единый запрос news_authors+authors, с последующим формированием массива вида $arAuthor['ID новости'] = array('Первый автор', 'Второй автор' ...); 2. Список всех новостей news При выводе новостей, по ID-новости, брать авторов из массива $arAuthor |
|||
|
||||
| KonstRuctor |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 31.3.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: нет |
Мне это нужно для построения новостей с пагинатором.
Класс пагинатора принимает один запрос. Если бы автор у каждой новости был 1, я решил бы задачу легко. Сейчас я кидаю в пагинатор простой запрос, строю вывод новостей без авторов, а потом во Вью опять обращаюсь к базе в цикле foreach. Это во-первых противоречит концепции MVC, к тому же соверщенно не оптимально. |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 14 Всего: 386 |
KonstRuctor, Уже предложен запрос. Gold Dragon, его предложил. Это запрос выводит все новости, считая, что у каждой новости по 1-му автору. В итоге получается не 5, а 8 новостей в массиве.
При выводе списка новостей достаточно запоминать, что новость с таким ID уже была выведена и дополнять новость с таким ID информацией о новом авторе. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| KonstRuctor |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 31.3.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: нет |
Прошу прощения, я не понял этот алгоритм. Не понимаю, как это сдедать.
|
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 14 Всего: 386 |
2 прохода.
Сначала собираем массив новостей + дописываем к ним авторов. Потом сбрасываем все новости с готовым списком авторов с html.
Это сообщение отредактировал(а) ksnk - 5.2.2012, 12:47 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| KonstRuctor |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 31.3.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: нет |
Спасибо! Теперь я понял идею работы приложения.
В моем случае, при работае с пагинатором, на мой взгляд, такой подход не годится, так как искажается общее кол-во новостей... Пока я пришел к такому выводу, что буду использовать 11 запросов к базе вместо 1. CI позволяет вычислить бенчмарк, поэтому я смогу реально увидеть разницу в скорости работы сайта с 1 запросом (без авторов вообще) и с 11 запросами (с авторами, получаемыми в цикле). О результатах обязательно сообщю. Спасибо!!! |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |