2015-12-18 2 views
2

компании структуры таблицы:Как найти идентификатор в массиве столбца MySQL

(`id`=`1`, `name`=`CompanyName`, `members`=`3,52,134,21`) 

Числа в столбце members являются идентификатор пользователя, добавленного в этой компании.

Когда пользователь с id = 3 OR 52 OR 134 OR 21 зарегистрирован в строке выше, должен быть возвращен с запросом MySQL.

Возможно ли это с запросом или мне нужно изменить структуру таблицы?

+0

использование FIND_IN_SET –

+1

магазина идентификаторы как CSV очень плохо дб design.You должны думать о нормализации. – Jens

ответ

3

Try:

SELECT * FROM tbl_name WHERE FIND_IN_SET('3',members); 

Примечание: Никогда не хранить данные в формате разделенных запятой. Если еще не поздно, сделайте еще одну таблицу и нормализуйте структуру. Нормализуя структуру, это будет простой и быстрый поиск путем индексации столбца.

Имя таблицы: company_users

pk_id member_id company_id(foriegn_key of company_table) 
1   3   1 
2   52   1 
3   21   1 
+0

Спасибо, но можете ли вы привести пример? – Koen

+0

Пример @Koen для чего? –

+0

«Если еще не поздно, сделайте еще одну таблицу и нормализуйте структуру. Нормализуя структуру», вы имеете в виду, что мне нужно сделать дополнительную таблицу под названием «company_users» и связать ее с таблицей компании? – Koen

3

Использование функции FIND_IN_SET():

Попробуйте это:

метод
SELECT u.* 
FROM Company c 
INNER JOIN company_users u ON FIND_IN_SET(u.id, c.members) 
WHERE c.id = 1; 
1

Используйте FIND_IN_SET(), как это ..

SELECT * FROM table_name WHERE FIND_IN_SET('your_search','table_column_name'); 

Например:

SELECT * FROM table_name WHERE FIND_IN_SET('52',members);