Agtustud Опубликовано 16 Сентября 2008 Жалоба Поделиться Опубликовано 16 Сентября 2008 необходимо написать следущий код через simple_construct SELECT c.cat_id, c.cat_title, c.cat_desc, c.cat_parent_id, c.cat_forum_id, c.cat_order, z.rev_date, z.articles FROM ibf_ibwiki_categories c left join (select p.page_cat, MAX(p.page_created) as rev_date, COUNT(p.page_id) as articles FROM ibf_ibwiki_pages p GROUP BY p.page_cat) Z ON ( z.page_cat = c.cat_id ) ORDER BY c.cat_order у меня получилось следущее. никак разобраться не могу =( помогите дописать $this->ipsclass->DB->simple_construct( array( 'select' => 'c.cat_id, c.cat_title, c.cat_desc, c.cat_parent_id, c.cat_forum_id, c.cat_order, z.rev_date, z.articles ', 'add_join' => array( 1=>array( ), 'where' => $extra . 'z.page_cat = c.cat_id', 'type' => 'left', )), 'from' => array('ibwiki_categories' => 'c'), 'order' => 'c.cat_order' ) ); Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 16 Сентября 2008 Жалоба Поделиться Опубликовано 16 Сентября 2008 Я бы вынес в кеш файл запросы из inwiki. По крайней мере такой запрос всё равно нельзя будет полностью на simple_construct записать, подзапрос останется одним из параметров, и выглядеть будет громоздко. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Agtustud Опубликовано 17 Сентября 2008 Автор Жалоба Поделиться Опубликовано 17 Сентября 2008 спасибо. загрузил =)Тоесть что ты бы сделал? Поподробнее Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 17 Сентября 2008 Жалоба Поделиться Опубликовано 17 Сентября 2008 См. в папку ./sources/sql/ и функции *cache* в class_db. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Agtustud Опубликовано 18 Сентября 2008 Автор Жалоба Поделиться Опубликовано 18 Сентября 2008 понял намек =)спасибочки запросы из инвики кидаю в функциях файл допустим /sources/sql/mssql_inviki.php далее заюзываю функции *cache* в class_db.осталось понять как заюзать =) будет что то типа $this->ipsclass->DB->build_query_from_cache ( $q="", $args=array(), $method='sql_queries' ) интересно мануалов по этой тему в инете нету cache_add_query точнее Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Agtustud Опубликовано 18 Сентября 2008 Автор Жалоба Поделиться Опубликовано 18 Сентября 2008 а если так$this->ipsclass->DB->cur_query .= "SELECT c.cat_id, c.cat_title, c.cat_desc, c.cat_parent_id, c.cat_forum_id, c.cat_order, z.rev_date, z.articlesFROM ibf_ibwiki_categories c left join (select p.page_cat, MAX(p.page_created) as rev_date, COUNT(p.page_id) as articles FROM ibf_ibwiki_pages p GROUP BY p.page_cat) Z ON ( z.page_cat = c.cat_id ) ORDER BY c.cat_order"; Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 18 Сентября 2008 Жалоба Поделиться Опубликовано 18 Сентября 2008 А также$this->ipsclass->DB->load_cache_file( ROOT_PATH . 'sources/sql/' . SQL_DRIVER . '_gallery_queries.php', 'gallery_sql_queries' ); Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Agtustud Опубликовано 19 Сентября 2008 Автор Жалоба Поделиться Опубликовано 19 Сентября 2008 обхожусь пока этим. можно чисто запросы писать и не строить их. хорошо дрова мсскл написаны мне нравится. $this->ipsclass->DB->cur_query еще не могу из за чего ошибка Warning: Invalid argument supplied for foreach() sources\components_public\ibwiki\cat.php on line 369foreach($perm_array as $key => $value) //369 line { if(!$value) { $value = '*'; } } на странице изменения раздела index.php?autocom=ibwiki&cmd=cat&do=edit_cat&id=2 хотя не обойдусь =(((как то надо юзать. так не дает$row = $this->ipsclass->DB->fetch_row() Fatal error: Uncaught exception 'com_exception' with message '<b>Source:</b> ADODB.Recordset<br/><b>Description:</b> Operation is not allowed when the object is closed.' in \ips_kernel\db_lib\mssql_adodb_com_php5.php:135 Stack trace: #0 \ips_kernel\db_lib\mssql_adodb_com_php5.php(135): mssql_lib::fetch_row() #1 \ips_kernel\class_db_mssql.php(709): mssql_lib->fetch_row('qid48d33f2260d8...') #2\sources\lib\func_ibwiki.php(195): db_driver_mssql->fetch_row() #3\sources\components_public\ibwiki\cat.php(559): func_inviki->update_cat_cache() #4\sources\components_public\ibwiki\cat.php(89): ibwiki_cat->process_form('new') #5\sources\components_public\ibwiki.php(184): ibwiki_cat->auto_run() #6\index.php(564): component_public->run_component() #7 {main} thrown in \ips_kernel\db_lib\mssql_adodb_com_php5.php on line 135 ошибка возникает если юзать $this->ipsclass->DB->cur_query без simple_exec вызывать при этом $row = $this->ipsclass->DB->fetch_row() что очень интересно в других местах fetch_row() работает Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 19 Сентября 2008 Жалоба Поделиться Опубликовано 19 Сентября 2008 $this->ipsclass->DB->cur_queryСтранно, что вы не нашли функцию $this->ipsclass->DB->query(). Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Agtustud Опубликовано 21 Сентября 2008 Автор Жалоба Поделиться Опубликовано 21 Сентября 2008 нашли нашли. токо с мсскл че то она парит Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 21 Сентября 2008 Жалоба Поделиться Опубликовано 21 Сентября 2008 Ясно Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Agtustud Опубликовано 23 Сентября 2008 Автор Жалоба Поделиться Опубликовано 23 Сентября 2008 вобщем пришел я к этой ошибке и не знаю что делать вместо симпл_консрукт использую query Fatal error: Uncaught exception 'com_exception' with message '<b>Source:</b> ADODB.Recordset<br/><b>Description:</b> Operation is not allowed when the object is closed.' in \ips_kernel\db_lib\mssql_adodb_com_php5.php:135 Stack trace: #0 \ips_kernel\db_lib\mssql_adodb_com_php5.php(135): mssql_lib::fetch_row() #1 \ips_kernel\class_db_mssql.php(697): mssql_lib->fetch_row('qid48d8aa556c2d...') #2 \sources\lib\func_ibwiki.php(195): db_driver_mssql->fetch_row() #3 \sources\lib\func_ibwiki.php(84): func_inviki->update_cat_cache() #4 \sources\components_public\ibwiki\index.php(76): func_inviki->init_categories() #5 \sources\components_public\ibwiki.php(184): ibwiki_index->auto_run() #6 \index.php(564): component_public->run_component() #7 {main} thrown in \ips_kernel\db_lib\mssql_adodb_com_php5.php on line 135 что вот с этим делать* переписать бы запрос simple_construct на мсскл и было бы все ок. жаль на мсскл без подзапроса не обойтись function update_cat_cache() { $this->ipsclass->cache['ibwiki_categories'] = array(); $cache = array(); $extra = ''; if($this->ipsclass->vars['ibwiki_approve_articles']) { $extra = 'p.page_approved=1 AND '; } $this->ipsclass->DB->simple_construct( array( 'select' => 'c.cat_id,c.cat_title,c.cat_desc,c.cat_parent_id,c.cat_perms,c.cat_forum_id,c .cat_order', 'add_join' => array( 1=>array( 'select' => 'MAX(p.page_created) as rev_date,COUNT(p.page_id) as articles', 'from' => array('ibwiki_pages' => 'p'), 'where' => $extra . 'p.page_cat = c.cat_id', 'type' => 'left', )), 'from' => array('ibwiki_categories' => 'c'), 'where' => ' 1=1 GROUP BY (c.cat_id)', 'order' => 'c.cat_order' ) ); $this->ipsclass->DB->simple_exec(); while ( $row = $this->ipsclass->DB->fetch_row() ) { $row['pagination_articles'] = $row['articles']; $row['cat_desc'] = $this->ipsclass->my_br2nl($row['cat_desc']); $cache[$row['cat_id']] = $row; } $this->ipsclass->cache['ibwiki_categories'] = $cache; $this->ipsclass->update_cache( array( 'name' => 'ibwiki_categories', 'array' => 1, 'deletefirst' => 1, 'donow' => 1 ) ); $this->rebuild_stats(); } коротко все ошибки из за процедуры update_cat_cache это запрос с query$row = $this->ipsclass->DB->fetch_row() при этом не работает. как можно сделать? function update_cat_cache() { $this->ipsclass->cache['ibwiki_categories'] = array(); $cache = array(); $extra = ''; if($this->ipsclass->vars['ibwiki_approve_articles']) { $extra = 'z.page_approved=1 AND '; } $this->ipsclass->DB->query .= " SELECT c.cat_id, c.cat_title, c.cat_desc, c.cat_parent_id, c.cat_forum_id, c.cat_order, z.rev_date, z.articles FROM ibf_ibwiki_categories c left join (select p.page_cat, count(p.page_approved)as page_approved MAX(p.page_created) as rev_date, COUNT(p.page_id) as articles FROM ibf_ibwiki_pages p GROUP BY p.page_cat) Z ON ".$extra." ( z.page_cat = c.cat_id ) ORDER BY c.cat_order "; $this->ipsclass->DB->simple_exec(); while ( $row = $this->ipsclass->DB->fetch_row() ) { $row['pagination_articles'] = $row['articles']; $row['cat_desc'] = $this->ipsclass->my_br2nl($row['cat_desc']); $cache[$row['cat_id']] = $row; } $this->ipsclass->cache['ibwiki_categories'] = $cache; $this->ipsclass->update_cache( array( 'name' => 'ibwiki_categories', 'array' => 1, 'deletefirst' => 1, 'donow' => 1 ) ); $this->rebuild_stats(); } Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Agtustud Опубликовано 25 Сентября 2008 Автор Жалоба Поделиться Опубликовано 25 Сентября 2008 Спасибо за помощь и подсказкиПоходу единственная в мире mssql версия inviki запущена =) долго я ее мучал. периодами. целое лето Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.