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
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

 

{{$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
Share on other sites

Мне одно не понятно, почему \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 on other sites

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

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