Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.