- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу

Что делать, если ваша email-рассылка попала в спам
10 распространенных причин и решений
Екатерина Ткаченко

В 2023 году Google заблокировал более 170 млн фальшивых отзывов на Картах
Это на 45% больше, чем в 2022 году
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Приветствую. В базе, условно, есть 2 таблицы: `users` и `groups`
Каждому пользователю можно присвоить идентификатор группы. Все просто, далее ищем так:
Возникла задача сделать возможность присваивать одному пользователю несколько групп.
И тут возникает 2 вопроса:
1) Как хранить значения в базе? JSON, просто строкой через запятую и т.п? Например, для пользователя `group_id` уже будет содержать поле не INT, а строковое.
2) Как искать? (WHERE `group_id` = ) уже не подойдет. Как это реализуется? Вижу эту возможность во многих ресурсах, но столкнулся с реализацией впервые. Решить могу, не не уверен, что сделаю лучшим способом, так как искать по базе методом ( WHERE `group_id` LIKE '%...%') кажется не правильным.
Обычно делают через запятую. Поиск делается через регулярное выражение:
group_id REGEXP '[[:<:]](1|2|3)[[:>:]]'
---------- Добавлено 02.05.2013 в 18:39 ----------
Например, для пользователя `group_id` уже будет содержать поле не INT, а строковое.
group_id оставить как основное, а для дополнительных групп внести новое поле.
---------- Добавлено 02.05.2013 в 18:47 ----------
Поиск делается через регулярное выражение
или LIKE-ом, но запятые нужно расставить оп определенному формату ,1,3,4, - LIKE "%,1,%"
Я думал что мускул это реляционная БД:)
Не надо ничего мудрить! Делайте новую запись.
Пусть юзер номер 12 состоит в группах 3, 5, и 42
То делаем 3 записи в БД:
`userID` - `groupsID`
12 - 3
12 - 5
12 - 42
На большой БД при WHERE спасут индексы, для LIKE и REGEXP они не помогут.
Правильно создать еще одну таблицу:
user_id | group_id
Оба поля целые. Если у юзера несколько групп - будет несколько записей в этой таблице.
Искать по этой таблице с join'ом users
Милованов Ю.С, опередил :)
http://www.codenet.ru/db/mysql/mystring4.php#find_in_set
Сколько вообще записей ожидается в таблице? Можно выбрать нужный способ, исходя из этого.
Милованов Ю.С, большое спасибо. Странно, что я сам не додумался. Правильно говорят - "Все гениальное просто (с)".
дани мапов, система будет универсальной и использоваться под разные нужны, так что способ предложенный izbushka и Милованов Ю.С самый подходящий. Как было верно подмечено:
Как было верно подмечено:
Главное при этом не забывайте об избыточности данных. Тут как минимум нужно будет создать три поля (если не хотите использовать составной первичный ключ) + индексы. Если все это ради одного двух запросов, которые притом выполняются из админ части...
для LIKE и REGEXP они не помогут.
на 300К записей запрос с LIKE по такой строке у меня выполняется не больше секунды.
Главное при этом не забывайте об избыточности данных. Тут как минимум нужно будет создать три поля (если не хотите использовать составной первичный ключ) + индексы. Если все это ради одного двух запросов, которые притом выполняются из админ части...
на 300К записей запрос с LIKE по такой строке у меня выполняется не больше секунды.
А может ТС 2-ой ВК делает:D