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

Как явно указать индекс для SQL запроса?

Recommended Posts

Приветствую.

 

Пытаюсь получить данные с такого запроса:

 

{{$feedback_author_count = \IPS\Db::i()->select( 'COUNT(*)', 'cms_custom_database_1', array( 'member_id=? and record_approved=?', $record->author()->member_id, 1 ) )->first();}}

 

Будет ошибка: Column 'member_id' in where clause is ambiguous

 

Если гуглить, выясняется, что нужно указать из какой конкретно таблицы брать данные. Пробовал вот так:

 

{{$feedback_author_count = \IPS\Db::i()->select( 'COUNT(*)', 'cms_custom_database_1', array( 'cms_custom_database_1.member_id=? and record_approved=?', $record->author()->member_id, 1 ) )->first();}}

 

Тоже самоеб удет, если пытаться сортировать по primary_id_field.

 

Вроде запрос синтаксически верный, но не обрабатываются IPB. Подскажите, что делать с такими колонками в базе данные?

Share this post


Link to post

Откуда там надо указать явное поле, если используется одиночный селект из одной таблицы без джойнов.

Не может быть такая ошибка в этом запросе, потому что тут только одно поле с member_id.

Share this post


Link to post

Вы правы. Ошибка была в другой строке. Для тех, кто будет после меня вот решение. Вот так не работает:

 

{{$table = new \IPS\Helpers\Table\Content('IPS\cms\Records1', $record->url(), array(array(\IPS\Db::i()->findInSet('member_id', array($record->author()->member_id)))));}}

 

И отдает ошибку:

 

А вот так работает:

 

{{$table = new \IPS\Helpers\Table\Content('IPS\cms\Records1', $record->url(), array(array(\IPS\Db::i()->findInSet('cms_custom_database_1.member_id', array($record->author()->member_id)))));}}

 

Вся суть здесь в cms_custom_database_1.member_id и становится лучше, потому что указываем в какой конкретно таблице использовать колонку member_id.

Share this post


Link to post

Мне одно не понятно, почему \IPS\Db::i()->findInSet если значение $record->author()->member_id это не сет? Нельзя разве просто указать table.member_id = $record->author()->member_id?

 

В вашем случае можно использовать

 

array( array( \IPS\cms\Records1::$databaseTable.'.member_id = ?', $record->author()->member_id ) )

Share this post


Link to post

Спасибо, предложенный вариант тоже работает и подошел кстати в некоторых других местах моего проекта!

Share this post


Link to post

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