я запрашиваю таблицу, где каждая строка имеет несколько меток:Mysql Query - Поиск в объединенной таблице без фильтрации записей
SELECT
user.*,
GROUP_CONCAT(tag.tag SEPARATOR ", ") as `tags`
FROM
user
LEFT JOIN
user_tag
ON
user_tag.user_id = user.id
LEFT JOIN
tag
ON
tag.id = user_tag.tag_id
GROUP BY
user.id
Теперь я хочу, чтобы иметь возможность поиска пользователей по тегам. Таким образом, после добавления где, это выглядит следующим образом:
SELECT
user.*,
GROUP_CONCAT(tag.tag SEPARATOR ", ") as `tags`
FROM
user
LEFT JOIN
user_tag
ON
user_tag.user_id = user.id
LEFT JOIN
tag
ON
tag.id = user_tag.tag_id
WHERE
tag.tag LIKE "%engineer%" OR
tag.tag LIKE "%programmer%"
GROUP BY
user.id
Это, однако, означает (очевидно), что если результат будет найден, таблица тегов не возвращает все теги пользователей больше. Таким образом, выбранный столбец tags
может выглядеть как «php programmer», хотя у пользователя больше тегов.
Есть ли способ поиска объединенной таблицы без фактического ограничения возвращаемых результатов без использования подзапросов?
Кажется, вы хотите, чтобы объединенные записи для всех пользователей, в которых EXISTS используется тег (например) «% engineer%» или «% programmer%». Но, конечно, предложение EXISTS считается подзапросом, поэтому, возможно, это не то, что вы хотите в ответ. Если бы это было так, я мог бы показать вам, как бы я построил запрос. – hardmath