Логика сравнения таблиц mysql
Опять я в перегрузе.
Суть: Веб-чат. Есть комнаты постоянные (которые создал админ/модеры) и временные (которые создают пользователи). Есть таблица всех комнат + есть таблица пользователей online с названиями комнат, в которых они сейчас находятся. Нужно получить одним запросом все постоянные комнаты + все временные, в которых есть хоть один пользователь. Либо наоборот, получить из временных те, где никого нет. Две таблицы. Первая "rooms"— "комнаты" чата: id, room, type. id = a_i. room — название комнаты type принимает значения "forever" или "time" Вторая "sessions" — пользователи online: id, name, lasttime, room id = id сессии name = имя юзера lasttime = последняя активность room = название комнаты, в которой находится. Задача: Взять из таблицы "rooms" только те комнаты, которые имеют type = "forever", и из оставшихся (с type = "time") только те, которые есть в таблице "sessions". Делать два запроса и перебор очень долго (планируется >1000 пользователей online и каждый из них может создать по комнате, а то и по две). Нужно делать запрос со сравнением.. логику додумать не могу. Мозг отключается :( |
where `type` = "forever" OR EXISTS(SELECT * FROM `sessions` условие )
это? |
Цитата:
с базами две недели работаю только.. с составлением запросов туговато :( |
group by тут не надо, у вас же нету аггрегатных функций.
|
Цитата:
|
нет. у вас выборка же не по юзерам, а по комнатам. а прелесть exists в том и состоит, что она и будет искать максимум 1 юзера в комнате. Т.е. скорость.
|
Цитата:
|
SELECT * FROM `rooms` WHERE `rooms`.`type`="forever" OR EXISTS(SELECT * FROM `sessions` WHERE `sessions`.`room`=`rooms`.`id`)
типа того |
Часовой пояс GMT +3, время: 01:55. |