Перейти к контенту

Помогите с грамотным написанием


Рекомендуемые сообщения

необходимо написать следущий код через 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'

)
);

Ссылка на комментарий
Поделиться на других сайтах

Я бы вынес в кеш файл запросы из inwiki. По крайней мере такой запрос всё равно нельзя будет полностью на simple_construct записать, подзапрос останется одним из параметров, и выглядеть будет громоздко.
Ссылка на комментарий
Поделиться на других сайтах

См. в папку ./sources/sql/ и функции *cache* в class_db.
Ссылка на комментарий
Поделиться на других сайтах

понял намек =)

спасибочки

 

запросы из инвики

кидаю в функциях файл допустим /sources/sql/mssql_inviki.php

 

далее заюзываю функции *cache* в class_db.

осталось понять как заюзать =)

 

будет что то типа

 

$this->ipsclass->DB->build_query_from_cache ( $q="", $args=array(), $method='sql_queries' )

 

интересно мануалов по этой тему в инете нету

 

cache_add_query точнее

Ссылка на комментарий
Поделиться на других сайтах

а если так

$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.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->load_cache_file( ROOT_PATH . 'sources/sql/' . SQL_DRIVER . '_gallery_queries.php', 'gallery_sql_queries' );

Ссылка на комментарий
Поделиться на других сайтах

обхожусь пока этим. можно чисто запросы писать и не строить их. хорошо дрова мсскл написаны мне нравится.

 

$this->ipsclass->DB->cur_query

 

еще не могу из за чего ошибка Warning: Invalid argument supplied for foreach() sources\components_public\ibwiki\cat.php on line 369

foreach($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() работает

Ссылка на комментарий
Поделиться на других сайтах

$this->ipsclass->DB->cur_query

Странно, что вы не нашли функцию $this->ipsclass->DB->query().

Ссылка на комментарий
Поделиться на других сайтах

Ясно :D
Ссылка на комментарий
Поделиться на других сайтах

вобщем пришел я к этой ошибке и не знаю что делать вместо симпл_консрукт использую 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();
}

Ссылка на комментарий
Поделиться на других сайтах

Спасибо за помощь и подсказки

Походу единственная в мире mssql версия inviki запущена =)

 

долго я ее мучал. периодами. целое лето

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.