Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.09.2012, 11:37   #31
Predator199
Форумчанин
 
Аватар для Predator199
 
Регистрация: 26.01.2012
Сообщений: 648
По умолчанию

//выводи данные из таблицы post( выводим id корневой категории через рекурсию $tpl->set ( '{c}', get($cid) ); ,таблицы category)
PHP код:
while ($rowb $db->get_row($tb)) { 
$tplb->set'{title}'$rowb['title'] );
$tpl->set '{c}'get($cid) ); 
$tpl->compile 'fyf' );   

//В таблице post ,поле category содержит id категории в которой находится новость.
PHP код:
$_row $db->get_row($tb);        
$cid=$_row[category]; 
//Берем id из таблицы пост, поля category.
Суть в том что выводит везде id корневой категории только первой записи. Не получается сгруппировать, так чтоб id корневой категории было у каждой записи свое.
$cat_info-информация о всех категориях.
Выводим тот номер категории когда parentid=0
PHP код:
$tb $db->query("SELECT  p.id, p.category, p.title,  FROM post p
INNER JOIN category c  GROUP BY p.id"
);


$_row $db->get_row($tb);        
$cid=$_row[category]; 
function 
get($cid){ 
global 
$cat_info
if(
$cat_info[$cid]['parentid']==0
return 
$cat_info[$cid]['id'] ; 
else  
return 
get($cat_info[$cid]['parentid']); 
}    



       
while (
$rowb $db->get_row($tb)) { 
$tplb->set'{title}'$rowb['title'] );
$tpl->set '{c}'get($cid) ); 
$tpl->compile 'fyf' );   


Результат таков.
PHP код:
id   title
2   ваз
2   приора
2   ford 
где id, результат рекурсии. В рекурсии вытаскиваем id корневой категории.
Predator199 вне форума Ответить с цитированием
Старый 05.09.2012, 11:44   #32
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

ну наверное запрос такой ...
Код:
$tb = $db->query("SELECT  p.id, p.category, p.title FROM post AS p
LEFT JOIN category AS c ON p.category=c.id  GROUP BY p.id");
по вашим кускам кода не становится понятнее ЧТО именно вы хотите вывести... по человечески можете показать пример БД - данные в таблице и что вы по человечески хотите на выходе?
ADSoft на форуме Ответить с цитированием
Старый 05.09.2012, 12:09   #33
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Насколько я знаю – применение в запросах GROUP BY имеет смысл только при использовании в запросе аггрегирующих функций (типа MIN, MAX, COUNT, AVG, etc...).
В остальных случаях – это бесполезное занятие.

Уверен, что задачу можно решить простым способом – только сначала нужно увидеть структуру и данные в БД, а также понять конечную цель всей этой возни, ожидаемый результат.
Покажи уже структуру таблиц в БД (которые участвуют в запросе), с некоторыми исходными данными.
И внятно напиши – зачем ты всё это делаешь?
Не показывай результаты того, что у тебя получается – а опиши, что должно получиться в идеале.
Andkorol вне форума Ответить с цитированием
Старый 05.09.2012, 13:42   #34
Predator199
Форумчанин
 
Аватар для Predator199
 
Регистрация: 26.01.2012
Сообщений: 648
По умолчанию

Таблица категории
PHP код:
id parentid name          dvig
1    0           Ваз       1.6
2    1           Приора
3    1           калина
4    0           Ford      2.0
5    4           focus
6    4           mondeo 
Таблица пост
PHP код:
id title      category
1  Ваз1          2
2  Ваз2          3
3  Ford1         5
4  Ford2         6
5  Ford3         5 
Что нужно поучить в результате.
PHP код:
title        dvig
Ваз1        1.6
Ваз2        1.6
Ford1       2.0
Ford2       2.0 
Predator199 вне форума Ответить с цитированием
Старый 05.09.2012, 14:48   #35
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

ИМХО - проще структуру БД переделать, и указать двиг и таблице Пост .... ибо и Калины могут с разным двигом быть и форды, и не париться.

или еще ввести таблицу двигов - и ссылаться не неё, тоже вариант и более гибкий
ADSoft на форуме Ответить с цитированием
Старый 05.09.2012, 15:04   #36
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
ИМХО - проще структуру БД переделать, и указать двиг и таблице Пост .... ибо и Калины могут с разным двигом быть и форды, и не париться.
или еще ввести таблицу двигов - и ссылаться не неё, тоже вариант и более гибкий
+1
Налицо кривая архитектура.
Получить искомое сейчас можно с использованием подзапросов, что не есть гуд:
PHP код:
SELECT p.`title`, 
    (
SELECT c.`dvidFROM `categoryc WHERE c.`id` = 
        (
SELECT c1.`parent_idFROM `categoryc1 WHERE c1.`id` = p.`category`)
    ) AS `
dvid
FROM `postp
Если добавить значения dvid для подкатегорий в таблице category – получится попроще запрос:
PHP код:
SELECT p.`title`, c.`dvid
FROM `categoryc, `post
WHERE c
.`id` = p.`category`; 
Ну а если сделать правильно, как советует ADSoft – то станет совсем все просто и хорошо.
Andkorol вне форума Ответить с цитированием
Старый 05.09.2012, 15:07   #37
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

опять же запрос с подзапросом - сработает только в случае вложенности 3 уровня )))) а вдруг чувак сделает 5, 10 ?
ADSoft на форуме Ответить с цитированием
Старый 05.09.2012, 15:27   #38
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
а вдруг чувак сделает 5, 10 ?
Этот – точно сделает, к бабке не ходи...
Andkorol вне форума Ответить с цитированием
Старый 05.09.2012, 17:28   #39
Predator199
Форумчанин
 
Аватар для Predator199
 
Регистрация: 26.01.2012
Сообщений: 648
По умолчанию

Да, опять 25.
Как мне рекурсию пропихнуть по вашему. Я же писал без дополнительных запросов. И структура то что надо.
Цитата:
ИМХО - проще структуру БД переделать, и указать двиг и таблице Пост .... ибо и Калины могут с разным двигом быть и форды, и не париться.
Я привел всего лишь пример, если пример -не значит что тематика моего сайта про автомобили.
По вашему проще к 2000 кускам категории приписывать объем двигателя? Или же сделать так чтоб было только у гл категории. И потом категории не всегда будет в пределах 2000. Их численность постоянно растет. И для того чтоб облегчить себе работу я и написал мою задачу. Все что я смог - вывести айди корневой категории только 1 попавшейся новости.
Как мне сгруппировать или еще что там, так чтоб id корневой категории соответствовал новости вложенную категорию. Раз рекурсии(функции) не разрешает использовать в цикле.
Написал мою проблему и под конец опять 25. Предлагают увеличивать запросы, не использовать рекурсии. Зачем мне это, когда все расписано что нужно и что удалось.

И потом, зачем указывать двигатели в посте. То что я хочу вытянуть из таблицы категории, остается неизменным на все под категории и на все время существования сайта.
Есть 1 запрос и численность не нужно увеличивать.
Цитата:
Сообщение от Predator199 Посмотреть сообщение
Есть функция. После функции идет while (){}
Есть 1 запрос. Нужно получить id до функции. Как можно все это грамотно прописать, так чтоб не прибавить еще 1 запрос?
Значение id везде одно и тоже . Как я понял, из-за того что функция срабатывает 1 раз, она не в цикле находится. Как решить это?

Последний раз редактировалось Stilet; 05.09.2012 в 21:18.
Predator199 вне форума Ответить с цитированием
Старый 05.09.2012, 18:01   #40
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Удивительная способность – нагородить кучу текста, из которого совершенно ничего нельзя понять, всё абсолютно бессвязно.
Цитата:
Сообщение от Predator199 Посмотреть сообщение
Значение id везде одно и тоже . Как я понял, из-за того что функция срабатывает 1 раз, она не в цикле находится. Как решить это?
Рекурсивная функция по сути своей и есть цикл.
Если нужна работа этой функции в цикле – ну так что мешает?
Помести вызов функции в цикл – только именно вызов, а не само определение функции.
Ты дерево каталога построить пытаешься, что ли?
Andkorol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как реализовать revaldo666 Microsoft Office Access 2 25.10.2010 12:54
как реализовать такое же меню как и здесь KWNlnc Общие вопросы Delphi 7 08.06.2010 22:46
Как реализовать на с++ Xnet Общие вопросы C/C++ 1 27.05.2010 22:20
Как реализовать? Gsingle БД в Delphi 4 08.04.2010 11:00
Кнопки как RadioButton'ы в GroupBox'e. Как реализовать? Casper-SC Общие вопросы .NET 9 06.03.2010 20:07