2013-03-18 9 views
1

Таблица: frei_sessionВыберите разделенные запятыми записи из таблицы

id username  accountId status status_mesg 

14 Sumit Bijvani 50   0  I am available 
16 Dilip Borad  49   1  I am available 
15 Karan Bijvani 51   1  I am available 

Таблица: пользователи

accountId friends 

49   50,52 
50   49,52,51,44 
51   50 

У меня есть 2 таблицы, frei_session есть записи интернет-пользователей и пользователей таблица содержит данные пользователей и их друзей, разделенных идентификатором запятой.

Я хочу, чтобы извлечь данные из frei_session таблицы на основе друзей столбца пользователей таблицы.

Для Ex

Если user 49 онлайн, я хочу выход, как показано ниже

id username  accountId status status_mesg 

14 Sumit Bijvani 50   0  I am available 

Поскольку пользователь 50 и 52 является другом пользователем 49, но теперь только пользователь 50 онлайн

Я пробовал следующий запрос на одном столе, но не знаю, как это сделать с 2 таблицами

SELECT DISTINCT status_mesg,username,session_id,status,guest 
    FROM frei_session 
    WHERE accountId!=49 
    AND guest=0 
    AND status!=2 
    AND status!=0 

ответ

3

Ваш стол не нормализуется как плохой дизайн схемы. В любом случае, чтобы ответить на ваш вопрос напрямую, MySQL имеет встроенную функцию под названием FIND_IN_SET, которая ищет конкретное значение в формате CSV.

SELECT b.* 
FROM users a 
     INNER JOIN frei_session b 
      ON FIND_IN_SET(b.accountID, a.friends) > 0 
WHERE b.status = 0 AND 
     a.accountID = 49 
+0

большое спасибо. не могли бы вы дать мне совет по нормализации таблицы? –

+0

еще одна вещь. Если у меня такая же запись в frei_session. Как 'accountID = 50' хранится 2 раза. так как я могу просто получить только 1 запись из нескольких записей? –

+0

и какую запись вы хотите получить, если оба пользователя онлайн/ –

Смежные вопросы