SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » MySQL, MariaDB » Несколько ID в строке через запятую (Прошу совета, как сравнивать с несколькими значениями через запятую)
Несколько ID в строке через запятую [сообщение #1658] Tue, 21 February 2023 11:42 Переход к следующему сообщению
Grapefruit в настоящее время не в онлайне  Grapefruit
Сообщений: 6
Зарегистрирован: February 2023
Junior Member
Коллеги, доброго дня!
Разрабатываю в компании систему управления задачами для сотрудников на PHP + MySQL. Столкнулся вот с чем:
Есть база SQL, в которой есть таблица "tasks" со следующими столбцами: id, icUserId, ownUserId, ...
В столбце "icUserId" хранятся id ответственных за задачу пользователей через запятую (например: "2,12,3,9)
Я авторизован, допустим, под пользователем с id = 12
Как мне вывести список задач, где в icUserId есть id 12?

Для понимания, сейчас запрос выглядит так и работает только для задач, где один ответственный или id авторизованного стоит первым: SELECT * FROM tasks WHERE (icUserId = "'.$userId.'" OR ownUserId = '.$userId.')';

В SQL и PHP разбираюсь на минимальном уровне, поэтому не закидывайте камнями сходу Smile
Re: Несколько ID в строке через запятую [сообщение #1661 является ответом на сообщение #1658] Tue, 21 February 2023 12:45 Переход к предыдущему сообщениюПереход к следующему сообщению
BlackEric в настоящее время не в онлайне  BlackEric
Сообщений: 288
Зарегистрирован: June 2022
Senior Member
Судя по всему у вас неверно спроектирована бд. Нужно делать связь 1:N. Т.е. есть таблица с задачей и к ней дочерняя, где на каждого ответственного своя запись.
Re: Несколько ID в строке через запятую [сообщение #1664 является ответом на сообщение #1661] Tue, 21 February 2023 15:41 Переход к предыдущему сообщениюПереход к следующему сообщению
Grapefruit в настоящее время не в онлайне  Grapefruit
Сообщений: 6
Зарегистрирован: February 2023
Junior Member
Благодарю за идею! Да, это решение, как вариант, структура простая, попробую таким путём. Надеялся, что есть решение, которое бы позволило сравнить переменную с записями в ячейке через запятую...
Re: Несколько ID в строке через запятую [сообщение #1665 является ответом на сообщение #1664] Tue, 21 February 2023 17:01 Переход к предыдущему сообщениюПереход к следующему сообщению
МП в настоящее время не в онлайне  МП
Сообщений: 794
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
вообще-то через запятую делается так:
WHERE ... IN (2,12,3,9)
но я лично твою задачу не понял.
Re: Несколько ID в строке через запятую [сообщение #1667 является ответом на сообщение #1665] Tue, 21 February 2023 17:54 Переход к предыдущему сообщениюПереход к следующему сообщению
Grapefruit в настоящее время не в онлайне  Grapefruit
Сообщений: 6
Зарегистрирован: February 2023
Junior Member
Вот кусок таблицы для примера:
https://grpf.ru/Screenshot_20.jpg

Вот запрос:
SELECT * FROM tasks WHERE icUserId = '.$userId.'
Выглядит для понимания так:
Список задач. В нём нужно показывать также задачи, где id пользователя есть дальше через запятую
https://grpf.ru/Screenshot_18.jpg

Несколько ответственных:
https://grpf.ru/Screenshot_19.jpg

[Обновления: Tue, 21 February 2023 17:57]

Известить модератора

Re: Несколько ID в строке через запятую [сообщение #1669 является ответом на сообщение #1667] Wed, 22 February 2023 09:36 Переход к предыдущему сообщениюПереход к следующему сообщению
BlackEric в настоящее время не в онлайне  BlackEric
Сообщений: 288
Зарегистрирован: June 2022
Senior Member
1:N связь делайте. Парсить строки для Where - это всегда очень медленно.
Re: Несколько ID в строке через запятую [сообщение #1670 является ответом на сообщение #1669] Wed, 22 February 2023 10:25 Переход к предыдущему сообщениюПереход к следующему сообщению
Grapefruit в настоящее время не в онлайне  Grapefruit
Сообщений: 6
Зарегистрирован: February 2023
Junior Member
Но, тем не менее, есть ли какой-то способ решить временно парсингом? Как мне корректный запрос сделать?
Допустим, есть записb в таблице "tasks":
id|name|icUserId|...
1|Название задачи|1,2|...
2|Название задачи 2|2|...

Как мне вывести обе задачи запросом вида "SELECT * FROM tasks WHERE icUserId = 2"?

Буду крайне признателен за помощь!
P.S. В будущем сделаю, как вы советуете, но сейчас нужно оперативное решение...
Re: Несколько ID в строке через запятую [сообщение #1671 является ответом на сообщение #1665] Wed, 22 February 2023 14:04 Переход к предыдущему сообщениюПереход к следующему сообщению
Grapefruit в настоящее время не в онлайне  Grapefruit
Сообщений: 6
Зарегистрирован: February 2023
Junior Member
Надо наоборот (ниже расписал подробно).

Таблица:
id | name | icUserId | ...

1 | Задача 1 | 2 | ...
2 | Задача 2 | 1,2 | ...
...
45 | Задача 45 | 2,5 | ...

Мне нужно получить список задач, где есть ответственный с ID = 2:

SELECT * FROM tasks WHERE icUserId = 2
Re: Несколько ID в строке через запятую [сообщение #1674 является ответом на сообщение #1671] Wed, 22 February 2023 16:21 Переход к предыдущему сообщениюПереход к следующему сообщению
BlackEric в настоящее время не в онлайне  BlackEric
Сообщений: 288
Зарегистрирован: June 2022
Senior Member
Парси их во временную таблицу или что-то в этом роде, но проще сразу переделать
Re: Несколько ID в строке через запятую [сообщение #1675 является ответом на сообщение #1674] Wed, 22 February 2023 17:15 Переход к предыдущему сообщению
Grapefruit в настоящее время не в онлайне  Grapefruit
Сообщений: 6
Зарегистрирован: February 2023
Junior Member
Ok. Благодарю! Осталось разобраться, как правильно переделать Smile
Предыдущая тема: Проблема дублирования информации при использовании SQL запроса
Следующая тема: Парсирование адреса средствами mysql
Переход к форуму:
  


Текущее время: Wed Apr 17 08:54:22 GMT+3 2024

Общее время, затраченное на создание страницы: 0.00746 секунд