Короче очень не удобно получается. И не понятно как засунуть в данные поста данные тегов?
Итого уже два запроса к бд и один цикл. (Добавление)
Как вариант в результирующем массиве прямо указывать индекс от post_id.
$sGetTags="select post_id, tag_name from tags where post_id in (".join(',',array_keys($rgPosts)).")";
foreach($db->query($sGetTags)as$rgTag){
$rgPosts[$rgTag['post_id']]['tags']=$rgTag;
}
}
Для вашей структуры таблиц конкретные запросы было писать лениво, но суть должна быть ясна.
Дык, в два запроса не получится. Потому что нужно будет собрать связи из relation_pt. id постов допустим в переборе массива мы получили, далее нужно получить из relation_pt id тегов. Снова перебрать полученный массив, и только можно будет по id тегов из tags получить данные тегов.
Хм, тут как минимум 3 запроса и 3 цикла.
Можно, но лучше не надо.
И вам и СУБД будет проще, если теги вытянете отдельным запросом:
сначала посты, собираете id постов, для которых надо достать теги, вторым запросом достаёте теги по этому списку постов.
Для всех постов нужно достать теги, но не у всех постов есть теги.
Так много запросов ведь получается, формируем массив из id постов, через where в relation_pt получаем все id тегов, что есть у поста, потом только забираем данные тегов.
Потом результирующий массив нужно будет перебрать и засунуть массив тегов туда.
Не много ли телодвижений? Мне нисколько не проще.
Использую CI, поэтому предпочтительно иметь один большой массив.
Чисто в качестве обучения можете привести запрос, который получает данные за один раз, как описал я в начале темы?
Здравствуйте.
Есть 4 таблицы, хочу все необходимые данные получить из одного запроса в бд.
relation_pt - в ней привязки между post_id и tag_id, потому как у posts может быть несколько тегов.
Однако есть небольшая проблема. Поскольку тегов у записи может быть несколько, я бы хотел выдернуть массив этих тегов, т.е. результат получить в таком варианте:
Извиняюсь, невнимательно прочел. Вы и так регами парсите.
Но всё же - что насчет штатных средств системы?
Я использую Codeigniter.
Штатный роутинг имеет вид /controller/method/var/var и т.д.
Реализация роутинга идет чере /controller/method/.
Данная реализация меня не устраивает.
Пока остановился на таком костыле
Ну тогда нужно в каких-то конфигах описывать в каком шаблоне, что за чем следует. У Вас же не будет несколько шаблонов работать одновременно. Например в одном шаблоне первым идет контроллер, потом метод, потом параметры, а в другом наоборот, сначала метод потом контроллер. Хотя везде сначала идет контроллер потом метод. Как может быть метод без контроллера?
Правила динамически цепляются при инициализации. С этим проблем нет. Все структурировано.
Мне нужно получить значения id и slug, исходя из правил роутинга, чтобы получить данные из бд.
Грубо говоря мне нужно получить значения id и slug.
Есть какое либо правило в переменной.
Правило мб: (:id)-(:slug), или (:slug)-(:id), или (:slug), или (:id)
Мы знаем это правило.
Есть значение урла, сформированного исходя из этого правила.
Например правило (:id)-(:slug) -> урл: 22-news-nokia
В переменную $id нужно получить 22, а в $slug = news-nokia
Другой вариант, правило (:slug) -> урл:news-nokia
В $id = null; $slug = news-nokia
Наверное меня неправильно поняли. Допустим в админке я выбрал шаблон формирование урлов (:id)-(:slug), все ссылки поменяли вид на данный шаблон. Но чтобы избежать дублирования страниц мне необходимо проверить значения id и slug на предмет принадлежности к одной и той же записи.
Что вы понимаете под "четко структурировать Ваши урлы."?
Я хочу иметь возможность менять урлы, но с привязкой к конкретному контролеру/методу.
Добрый день.
есть правила формирование урлов:
(:id)-(:slug) или например (:slug)-(:id), или просто (:slug) или просто (:id)
т.е. урлы будут такими
1-news-rusiia
или
news-russia-1
или
news-rusiia
или
1
Проблема заключается в том, как вытянуть (:slug) и (:id).
Делаю так
Тут я в тупике, подскажите более рациональное решение, чем плодить кучу условий по проверке.
Исходя из шаблона формирования урлов в $matches[1] или $matches[2] будут всегда разные данные. Поэтому я не могу точно сказать что находится в массиве.
Таким образом сложно получить на выходе :
$id, $slug
Подскажите как решть данную проблему.
Добрый вечер.
Подскажите как реализовать динамический роутинг, исходя из правил записанных в бд.
В таблице routes 3 поля. Name, и Route, Controller соответственно.
Например:
category | id-slug | category
post | /category/slug.html | post
Из бд достаем, обрабатываем. Получаем например для post: '(:num)-(:any)/(:any).html'
Как эти правила подключать? В файле routes.php? - как мне вариант не очень, поскольку придется подключать бд, и все обрабатывать в этом файле.
Производный класс от CI_Routes? - не пойму как реализовать.
Подскажите пожалуйста логику, пример кода.
Благодарю.
Затык у меня один простой массив, второй многомерный ассоц.
----
М.б. есть возможность избежать перебора массивов, правильно сформировав запрос к бд?
Использую CI.
Запрос пишу таким образом