Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
vinegredz

Как явно указать индекс для 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 ) )

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

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

×
×
  • Создать...