Перейти к публикации
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.

Синтаксис вложенных запросов

Опубликовано:

Чтобы не создавать новую тему...

Подскажите пожалуйста синтаксис вложенных запросов.

Есть прямой запрос к базе

SELECT * FROM `ibf_pickems_picks` WHERE `gameid` IN (  SELECT `id` FROM `ibf_pickems_games` WHERE `weekid` =57 AND `userid` =8554 )

 

Хочу разместить данный запрос в шаблоне. Какой у него будет синтаксис $this->DB->build( array('select' => 't.*', и т.д ?

С простыми запросами проблем нет, а вот на этом споткнулся

Спасибо!

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

Опубликовано:
Хочу разместить данный запрос в шаблоне.

В шаблоне вообще размещать любые запросы не самая удачная идея. И на будущие, если вопрос не касается сабжа - в данном случае экспорт емайлов, нужно спрашивать в отдельной теме.

 

array( 'select' => 'p.*',
   'from'   => array( 'pickems_picks' => 'p' ),
   'add_join' => array( 
		array( 'from'  => array( 'pickems_games' => 'g'),
			   'where' => 'g.id=p.gameid',
			   'type'  => 'inner',
		) 
	), 
	'where' => 'weekid=57 AND userid=8554' )

Конструкция выше аналогична нативному SQL запросу (используем джоин вместо вложенного подзапроса):

 

SELECT p.* FROM ibf_pickems_picks p INNER JOIN ibf_pickems_games g ON g.id=p.gameid WHERE weekid=57 AND userid=8554

При составлении запроса через конструктор, указывать префикс таблиц не нужно.

Для фетчинга одной записи:

 

$row = $this->DB->buildAndFetch( QUERY );

Для множество записей

 

$this->DB->build( QUERY );
$this->DB->execute();
while( $row = $this->DB->fetch() )

Опубликовано:

В шаблоне вообще размещать любые запросы

Почему? Базу сильно нагружают?

Опубликовано:
  • Автор

Спасибо, все работает! База некрупная, посещаемость невысокая - нагрузка не должна сильно увеличиться

Опубликовано:

Почему? Базу сильно нагружают?

Ну хотя бы потому что http://ipbskins.ru/forum/topic10752.html/page__view__findpost__p__69935

А говно запросом можно одинаково нагрузить базу как из шаблона, так и из скрипта. В шаблонах можно всунуть запрос в каком нибудь шаблоне, который крутится по циклу (тот же userInfoPane например) и нагенерировать кучу запросов на странице.

Опубликовано:

Почему? Базу сильно нагружают?

Потому что это шаблон.

Опубликовано:

Полезная информация, спасибо.

 

А говно запросом можно одинаково нагрузить базу как из шаблона, так и из скрипта. В шаблонах можно всунуть запрос в каком нибудь шаблоне, который крутится по циклу (тот же userInfoPane например) и нагенерировать кучу запросов на странице.

А как можно просканировать форум на наличие таких тяжёлых запросов?

Опубликовано:

Включить логирования медленных запросов.

На уровне сервера включено.

Решил последовать вашему совету и включить на форумном уровне:

define( 'IPS_SQL_FIND_SLOW_MODE', 0.5 );

А где отчёт просматривать на форумном уровне?

Опубликовано:

На уровне сервера включено.

Тогда нет смысла делать это на форуме.

 

А где отчёт просматривать на форумном уровне?

В /cache/sql_slow_log_*.cgi

 

Оффтоп

Самое интересное, что автор там по сей день живет с тормозами в ип.контенте. Сам форум вроде работает у него бодро.

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

Сейчас на странице 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.