не работает IN вывод по нескольким идам

robinner

Новичок
не работает IN вывод по нескольким идам

есть таблица room_1
id | ... | ... | ... | online
--------------------------------
1 | ... | ... | ... | 1||2||4|| ------- обязательно id 1 только в этой строке есть такая структура 1||2||4||

и есть таблица users.

нужно осуществить выборку 1,2,4 из таблицы users.

я составил такой запрос
SELECT `users`.*, `room_1`.`online` FROM `users` INNER JOIN `room_1` ON `users`.`id` IN (REPLACE(SUBSTRING(`online`, 1, CHAR_LENGTH(`online`)-2), '||', ','))

такой запрос выбирает только 1 пользователя отсюда 1||2||4|| , например отсюда 2||3|| выберет 2 пользователя

подскажите как решить задачу, пожалуйста
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Пробуй подзапросом
SELECT * FROM table WHERE field IN(select).

Сначала просто
SELECT * FROM table WHERE field IN(1,2,3).

Потом с своими "шаманствами" =)

SELECT * FROM table WHERE field IN(REPLACE(SUBSTRING('1||2||3||', 1, CHAR_LENGTH('1||2||3||')-2), '||', ',') )

Потом с подзапросом.
SELECT * FROM table WHERE field IN(select REPLACE(........) FROM table WHERE).
 

Вурдалак

Продвинутый новичок
Нужна отдельная таблица под пользователей online. Там будет идентификатор пользователя, комнаты и timestamp.

А так — ни..я.
 

robinner

Новичок
Автор оригинала: Mr_Max
Пробуй подзапросом
SELECT * FROM table WHERE field IN(select).

Сначала просто
SELECT * FROM table WHERE field IN(1,2,3).
Пробовал....и так и так
SELECT * FROM table WHERE id IN(1,2,3) - вот так все работает
REPLACE(SUBSTRING('1||2||', 1, CHAR_LENGTH(`online`)-2), '||', ',') - вот это тоже все верно выдает 1,2

но с подзапросом и с моей ересью не работает , тут что-то вот в этом не так REPLACE(SUBSTRING(`online`, 1, CHAR_LENGTH(`online`)-2), '||', ',')


а если делать отдельную таблицу....Ниче что у меня будет много комнат...Просто я пишу чат, в котором можно создавать комнаты.
А про новую таблицу я и сам думал, потому что там по времени надо будет все равно делать онлайн, но я хотел разобраться с этим вопросом
 

robinner

Новичок
Я вот что подумал...
Наверное, не буду я придумывать глупые конструкции.

Сделаю все проще.

Все равно пользователь по задумке может находиться только в одной комнате. Я просто добавлю в таблицу users два поля комната и последняя активность.
и при отправке сообщения буду записывать время последней активности. А в список онлайн буду выборку из users осуществлять.
и если не было выхода из комнаты то ставить пользователь уснул а если и дальше он не пишет выкидывать его из онлайна
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Сори. Поспешил.
 
Сверху