У меня возникла проблема с созданием оптимального SQL-запроса. У меня есть система личных сообщений, где пользователь может отправлять отдельные сообщения многим пользователям или группам пользователей. Получатели хранятся в столбце с одним текстом (не спрашивайте меня, почему я не отвечаю за его разработку):
[60,63,103,68]
Кроме того, я добавил новый текстовый столбец, где размещена группа, к которой принадлежит пользователь, поэтому я могу иметь в качестве группы в базе данных:
[55,11,11,0]
Теперь я хочу получить всех пользователей (получателей) и их группы. У меня есть таблица, где отношение между идентификатором пользователя и группы. Проблема в том, что одиночный пользователь может принадлежать нескольким группам, например, пользователь 60 может быть в группе ID 55 и 11. Я хотел бы сделать это наиболее оптимальным способом (в столбце могут быть 50+ приемников) поэтому я могу написать такой запрос:
SELECT u.name, u.last_name, g.group_name FROM user u LEFT JOIN group g ON u.id = g.user_id WHERE u.id IN (".$users.") and g.id IN (".$groups.")
К сожалению, имя группы, возвращаемое запросом, может быть неправильным – связано с идентификатором группы i, размещенным в WHERE. Я могу создать PHP foreach и получить пользователя и его группу, используя идентификаторы, которые у меня есть:
foreach($user as $key => $single) { $sql = "... where u.id = $single AND g.id = $group[$key] "; }
но я думаю, что это очень плохо. Есть ли способ получить пользователя и указанную группу в одном запросе?