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

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


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

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

 

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

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

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

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

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

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

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

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

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

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