Опубликовано: 17 января 201312 г Вопрос к программистам sql каким образом преобразовать sql запрос к БД: if( count($data['topic_data']) ) { $reps = array(); $tids = array_keys( $data['topic_data'] ); $this->DB->build( array( 'select' => 'rc.rep_points', 'from' => array('reputation_cache' => 'rc'), 'add_join' => array( 0 => array( 'select' => 'p.topic_id', 'from' => array('posts' => 'p'), 'where' => 'rc.type_id=p.pid', 'type' => 'inner', ), ), 'where' => 'p.topic_id IN ('.implode(',', $tids).') AND rc.app="forums"', 'group' => 'p.topic_id', 'order' => 'p.pid ASC', ) ); $this->DB->execute(); while( $row = $this->DB->fetch() ) { $reps[ $row['topic_id'] ] = $row['rep_points']; } foreach( $tids as $v ) { $data['topic_data'][$v]['rep_firstpost'] = ( $reps[$v] ) ? $reps[$v] : 0; } } (благодарность за код siv1987) в вариант для вставки в html (шаблон страницы IP.Content) По примеру кода-запроса к БД <if test="intval($record['record_topicid'])"> <if test="($forum = $this->DB->buildAndFetch( array('select' => 'f.id, f.name, f.name_seo', 'from' => array('forums' => 'f'), 'where' => 'f.id=t.forum_id', 'add_join' => array( array('from' => array('topics' => 't'), 'where' => 't.tid='.$record['record_topicid'])))))!==FALSE"> {$forum['name']} </if> </if>
Опубликовано: 22 января 201312 г Автор <php> $_data = $this->DB->buildAndFetch( array( 'select' => 'p.topic_id', 'from' => array('posts' => 'p'), 'where' => 'p.topic_id='.$record['record_topicid'].' AND rc.type="pid"'; 'add_join' => array( array( 'select' => 'rc.rep_points', 'from' => array('reputation_cache' => 'rc'), 'where' => 'rc.type_id=p.pid'; ) ) ); </php> Вроде бы все верно, что то подобное и хотел сконструировать... но от чего то выдается синтаксическая ошибка со ссылкой на page.php ip.content`а [Tue Jan 22 17:22:44 2013] [error] [client 12.222.54.132] PHP Parse error: syntax error, unexpected ';', expecting ')' in /var/www/gogo/data/www/***.ru/forums/admin/applications_addon/ips/ccs/sources/pages.php(419) : eval()'d code on line 2343 [Tue Jan 22 17:22:44 2013] [error] [client 12.222.54.132] PHP Fatal error: Class 'skin_ccs' not found in /var/www/gogo/data/www/***.ru/forums/admin/applications_addon/ips/ccs/sources/pages.php on line 421 [Tue Jan 22 17:22:44 2013] [error] [client 12.222.54.132] PHP Parse error: syntax error, unexpected ';', expecting ')' in /var/www/gogo/data/www/***.ru/forums/admin/applications_addon/ips/ccs/sources/pages.php(419) : eval()'d code on line 2343, referer: http://***.ru/ [Tue Jan 22 17:22:44 2013] [error] [client 12.222.54.132] PHP Fatal error: Class 'skin_ccs' not found in /var/www/gogo/data/www/***.ru/forums/admin/applications_addon/ips/ccs/sources/pages.php on line 421, referer: http://***.ru/ строка 419 page.php 419. eval( $skinFile['cache_content'] ); 421. $this->registry->output->compiled_templates['skin_ccs'] = new skin_ccs( $this->registry ); } }
Опубликовано: 22 января 201312 г 'rc.type_id=p.pid';AND rc.type="pid"'; ; в конце замените на , А ); замените на ));Там не хватает одной скобки.
Опубликовано: 22 января 201312 г Автор 'rc.type_id=p.pid';";" в конце замените на "," Белый экран и все та же ошибка в логах. Не помогает.
Опубликовано: 22 января 201312 г Автор Синтаксис верный, результатов нет.. :( Спасибо, вам @siv1987, за помощь, и так уже достал просьбами.
Опубликовано: 22 января 201312 г Покажите результат кода print_r( $record );В шаблоне где вы вставляете запрос к бд
Опубликовано: 22 января 201312 г Автор Покажите результат кода <php>print_r( $record );</php>В шаблоне где вы вставляете запрос к бд Был неправ. Подтянулась репутация, но только для первого продвинутого поста на главную ccs, остальные выдвинутые без репы. [primary_id_field] => 39 [member_id] => 2 [record_saved] => 1358746186 [record_updated] => 1358746186 [rating_real] => 0 [rating_hits] => 0 [rating_value] => 0 [category_id] => 1 [record_locked] => 0 [record_comments] => 0 [record_views] => 1 [record_approved] => 1 [record_pinned] => 0 [record_dynamic_furl] => a-vse-tak-horosho-nachinalos [record_static_furl] => [record_meta_keywords] => [record_meta_description] => [record_template] => 0 [record_topicid] => 33
Опубликовано: 22 января 201312 г Автор Понял, подтягивает если есть репутация. При 0 не подтягивает, но это не принципиально. :rolleyes: обнял-расцеловал!
Опубликовано: 22 января 201312 г $_data['rep_points'] = intval( $_data['rep_points'] ); Добавить после sql запроса.
Опубликовано: 23 января 201312 г Автор $_data['rep_points'] = intval( $_data['rep_points'] ); Добавить после sql запроса. Хмм...вчера с нулем рейтинг показывало, а сегодня чего то нет... Верно вставил? $_data = $this->DB->buildAndFetch( array( 'select' => 'p.topic_id', 'from' => array('posts' => 'p'), 'where' => 'p.topic_id='.$record['record_topicid'].' AND rc.type="pid"', 'add_join' => array( array( 'select' => 'rc.rep_points', 'from' => array('reputation_cache' => 'rc'), 'where' => 'rc.type_id=p.pid', ) ) ) ); {$_data['rep_points'] = ( $_data['rep_points'] ) ? $_data['rep_points'] : 0;}
Опубликовано: 23 января 201312 г Фигурные скобки уберите, это php код. Они нужны только в html коде для обрамления переменных.
Вопрос к программистам sql
каким образом преобразовать sql запрос к БД:
if( count($data['topic_data']) ) { $reps = array(); $tids = array_keys( $data['topic_data'] ); $this->DB->build( array( 'select' => 'rc.rep_points', 'from' => array('reputation_cache' => 'rc'), 'add_join' => array( 0 => array( 'select' => 'p.topic_id', 'from' => array('posts' => 'p'), 'where' => 'rc.type_id=p.pid', 'type' => 'inner', ), ), 'where' => 'p.topic_id IN ('.implode(',', $tids).') AND rc.app="forums"', 'group' => 'p.topic_id', 'order' => 'p.pid ASC', ) ); $this->DB->execute(); while( $row = $this->DB->fetch() ) { $reps[ $row['topic_id'] ] = $row['rep_points']; } foreach( $tids as $v ) { $data['topic_data'][$v]['rep_firstpost'] = ( $reps[$v] ) ? $reps[$v] : 0; } }(благодарность за код siv1987)
в вариант для вставки в html (шаблон страницы IP.Content) По примеру кода-запроса к БД
<if test="intval($record['record_topicid'])"> <if test="($forum = $this->DB->buildAndFetch( array('select' => 'f.id, f.name, f.name_seo', 'from' => array('forums' => 'f'), 'where' => 'f.id=t.forum_id', 'add_join' => array( array('from' => array('topics' => 't'), 'where' => 't.tid='.$record['record_topicid'])))))!==FALSE"> {$forum['name']} </if> </if>