Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Cheshir

SQL код в html

Recommended Posts

Вопрос к программистам 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>

 

Share this post


Link to post
Share on other sites
<php>
$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']))));
</php>
....
<if test="$forum['id']">
  {$forum['name']}
</if>

Share this post


Link to post
Share on other sites

Видимо неправильно поняли, или я так объяснил. Вы написали запрос на вывод названия форума. А мне нужен вариант по первому коду (под первым спойлером). Под вторым спойлером пример...

Share this post


Link to post
Share on other sites

Чем первый вариант не устраивает?

Share this post


Link to post
Share on other sites

Чем первый вариант не устраивает?

 

 

Первый выриант для форума, а мне нужно вывести на главную ИП.Контента. sql запросы понимаю, а в общую картину сложить не могу...

обратный порядок должен быть... сравнение с

't.tid='.$record['record_topicid'

и вывод из reputation_cache rep_points согласно...все запутался... в общем вывод репутации первого сообщения, насколько понимаю в ИП.Контенте можно сравнивать только по $record['record_topicid', больше пока не нашел

Share this post


Link to post
Share on other sites

Если речь о IP.Content тогда хз...

Share this post


Link to post
Share on other sites

Но запрос то остается запросом... единственный важный момент из IP.Content - с чем сравнивать запрос. Как должен выглядеть запрос в таком случае, если сначала сравнивается ID топика с .$record['record_topicid']? - .$record['record_topicid'] из IP.Content - это и есть id топика в ip.board

 

если словами, то по типу:

если

't.tid='.$record['record_topicid']

то t.tid сравниваем с чем то (еще не понял как вы вытягиваете id первого сообщения, наверно функцией foreach)

получаем репутацию этого t.tid и выводим результат...

 

ужасно звучит... понимаю

Share this post


Link to post
Share on other sites

еще не понял как вы вытягиваете id первого сообщения, наверно функцией foreach

При помощью GROUP BY topic_id ORDER BY pid ASC

foreach служит там совсем для другого, он добавляет в массив topic_data полученные данные.

Share this post


Link to post
Share on other sites

да...догадался...

 

но по логике должна работать такая комбинация

 

 

        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'] ] = $record['record_topicid'];
           }

           foreach( $tids as $v )
           {
               $data['topic_data'][$v]['rep_firstpost'] = ( $reps[$v] ) ? $reps[$v] : 0;
           }
       }

 

где

$reps[ $row['topic_id'] ] = $record['record_topicid'];

сравнение

 

и в шаблон

 

{$data['rep_firstpost']}

 

только нефига не работает...

Share this post


Link to post
Share on other sites

но по логике должна работать такая комбинация

Ну эта комбинация была написана для конкретного файла, я не уверен что в таком виде она будет работать в другом месте.

 

где

$reps[ $row['topic_id'] ] = $record['record_topicid'];

сравнение

Это совсем не сравнение, а присвоение. Сравнение так может быть только в sql запросе, а здесь уже php.

 

Напишите какие данные в этом шаблоне есть (имена переменных)

и какие данные нужно вытащить (имена таблиц и полей)

Share this post


Link to post
Share on other sites

Запросом print_r( $variable ); в шаблоне сделать?

Share this post


Link to post
Share on other sites

Ничего не выходит...

 

<if test="intval($record['record_topicid'])">
<if test="(
$record['record_topicid'] = $this->DB->buildAndFetch( 
array(
'select' => 'p.topic_id', 
'from' => array('posts' => 'p'), 
'where' => 			{
			$row['topic_id'] = $row['pid'];
		}
'add_join' => array( 
array(
'select' => 'rep_points',
'from' => array('reputation_cache' => 'rc'), 
'where' => {
			$row['type_id'] = $row['rep_points'];
		}

))))!==FALSE">
</if>
</if>

 

Совсем не в ту степь?

Share this post


Link to post
Share on other sites

Жесть. Как вы думаете что вернет if( intval( '1" SQL' ) ) - true или false?

 

Я уже десять раз писал, не используйте запросы к бд в if test="". Для этого есть спец теги .

Запрос составлен неверно. Правильно он будет примерно таким

 

<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>

а ниже в шаблоне

 

<if test="$_data['topic_id']">
   Мега репа: {$_data['rep_points']}
</if>

Share this post


Link to post
Share on other sites

Почему в if нельзя использовать запросы к бд?! оО с выводом названия форума работает же =)

Share this post


Link to post
Share on other sites
Почему в if нельзя использовать запросы к бд?!

Программирование для битардов.

 

<php>$a = func($c)</php> ===> <?php $a = func($c); ?>

<if test="$a = func($c)"></if> ===> <php if($a = func($c)) { ?><?php } ?>

 

Если вам нужно выполнить "$a = func($c);", зачем вам лишняя операция if и пара десятков лишних конструкций в итоговом коде шаблона? Ресурсов сервера больно до*уя?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...