Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
Cheshir

SQL код в 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>

 

Поделиться сообщением


Ссылка на сообщение
<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>

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

 

 

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

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

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

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

Но запрос то остается запросом... единственный важный момент из 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 и выводим результат...

 

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

Поделиться сообщением


Ссылка на сообщение

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

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

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

Поделиться сообщением


Ссылка на сообщение

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

 

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

 

 

        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']}

 

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

Поделиться сообщением


Ссылка на сообщение

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

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

 

где

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

сравнение

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

 

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

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение

Жесть. Как вы думаете что вернет 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>

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение
Почему в 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 и пара десятков лишних конструкций в итоговом коде шаблона? Ресурсов сервера больно до*уя?

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...