Можно ли изменить модель данных таким образом, чтобы вместо этого связь между пользователями и их любимыми сообщениями сохранялась в другой таблице?
Хранение связей в одном столбце сводит на нет преимущества реляционной базы данных. Вы платите за производительность, используя подобную функцию, вы больше не можете хранить дополнительные данные об отношениях, и данные сложнее запрашивать.
Альтернативная модель может выглядеть примерно так (не может включать изображение, так как я новый пользователь, но я сделал один здесь ):
users
- id
messages
- id
favorite_messages
- user_id (foreign key to users.id)
- message_id (foreign key to messages.id)
С этим ваш исходный запрос будет упрощен до следующего:
select count(1) from favorite_messages where user_id = userid
Кроме того, вы можете делать такие вещи, как получение списка избранных сообщений пользователя:
select
*
from
messages
inner join favorite_messages
on messages.id = favorite_messages.message_id
where
user_id = userid