Перейти к содержимому
Русский язык для Invision Community 5

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

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

 

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

 

{{$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. Подскажите, что делать с такими колонками в базе данные?

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

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

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

  • Автор

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

 

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

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

  • Автор

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

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

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.