@San4aus
FullStack developer

Почему Sphinx не выводит все категории?

Здравствуйте! Решил добавить в своё приложение на Laravel поиск с помощью Sphinx. Поставил библиотеку fobiaphp / laravel-sphinx с настройкой разобрался. Есть проблема с составлением запроса, в частности по выводу всех категорий для определённого товара. В Laravel этот запрос выглядит так:

select `categories`.*, `categories_products`.`product_id` as `pivot_product_id`, `categories_products`.`category_id` as `pivot_category_id` 
from `categories` inner join `categories_products` on `categories`.`id` = `categories_products`.`category_id`
 where `categories_products`.`product_id` in (41525, 49423, 49823, 52184, 52553, 52554, 52555, 52556, 52557, 52558, 52559, 52560, 52561, 52562, 52564)


В принципе со своей задачей справляется и выводит категории корректно.

В sphinx я сделал похожий запрос, он отрабатывает, но например где привязано несколько категорий, он выводит везде по одной. Собственно настройка индекса в сфинксе:

source categories : conn {
      sql_query =   SELECT cp.product_id, cp.category_id, cp.product_id AS product_id_attr, cp.category_id AS category_id_attr, c.name, c.name AS name \
                         FROM categories AS c \
                    INNER JOIN categories_products AS cp ON c.id = cp.category_id \
      
      sql_attr_uint = product_id_attr
      sql_attr_uint = category_id_attr
      sql_field_string = name
    }


Вот так он выглядит на деле:

select *, product_id_attr as pivot_product_id_attr, category_id_attr as pivot_category_id_attr 
FROM categories 
where product_id_attr in (52842, 52843, 52844, 52850, 53521, 53522, 53523, 53524, 53525, 53526, 53527, 53528, 53529, 53530, 53531)


Таблица categories_products имеет только 2-а столбца: category_id и product_id.
  • Вопрос задан
  • 97 просмотров
Решения вопроса 1
@San4aus Автор вопроса
FullStack developer
Вопрос решил. Обновил запрос для сфинкса и устранил ошибку в laravel. Т.к. ругался, что id в string приходит, поэтому перевёл в коде id в integer принудительно.

SELECT c.id AS id, c.name AS name,  \
                GROUP_CONCAT(DISTINCT cp.product_id) AS product_id, \
        GROUP_CONCAT(DISTINCT cp.category_id) AS category_id \
                     FROM categories AS c \
                INNER JOIN categories_products AS cp ON c.id = cp.category_id \
        GROUP BY c.id \
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
opium
@opium
Просто люблю качественно работать
А зачем для этого сфинкс, выбирайте их из мускула, сфинкс он для другого
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы