Вы используете GROUP_CONCAT
, который является агрегатной функцией и объединяет ваши результаты в одну.
Добавьте предложение GROUP BY
:
SELECT movies . * , GROUP_CONCAT( categories.name ) AS categories, GROUP_CONCAT( categories.id ) AS categories_id
FROM movies
LEFT JOIN movies_categories ON ( movies.id = movies_categories.movie_id )
LEFT JOIN categories ON ( movies_categories.category_id = categories.id )
WHERE movies.movie_title LIKE '%surfer%'
OR movies.movie_title LIKE '%date%'
OR movies.movie_title LIKE '%never%'
OR movies.movie_title LIKE '%back%'
OR movies.movie_title LIKE '%down%'
OR movies.movie_title LIKE '%surfer%'
OR movies.movie_title LIKE '%soul%'
OR movies.movie_title LIKE '%the%'
OR movies.movie_title LIKE '%transporter%'
GROUP BY
movies.id
LIMIT 0 , 30
Кроме того, если ваш movies
Таблица MyISAM
, вы можете запустить это:
SELECT movies.*,
GROUP_CONCAT(categories.name) AS categories,
GROUP_CONCAT(categories.id) AS categories_id
FROM movies
LEFT JOIN
movies_categories
ON movies_categories.movie_id = movies.id
LEFT JOIN
categories
ON categories.id = movies_categories.category_id
WHERE MATCH(movie_title) AGAINST ("never back down" IN BOOLEAN MODE)
GROUP BY
movies.id
LIMIT 0, 30
Этот запрос будет выполняться намного быстрее, если вы создадите индекс FULLTEXT
:
CREATE FULLTEXT INDEX fx_movies_title ON movies (movie_title)