В качестве прямого ответа на вопрос предлагаю использовать регулярные выражения. '^1,|,1,|,1$|^1$'
тут мы ищем 1 во всех случаях:
^1,
- в начале строки 1 и далее другие числа
,1,
- где-то в середине строки
,1$
- последнее число в строке 1
^1$
- единственное число и это 1
Schema (MySQL v5.7)
CREATE TABLE Tasks (
id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
Name VARCHAR (255) NOT NULL,
Users VARCHAR (255)
);
INSERT INTO Tasks (Name, Users)
VALUES
("Footbal", '1'),
("Cooking", '178,1,202'),
("Shopping", '12,33');
Query #1
SELECT * from Tasks WHERE (SELECT Users REGEXP '^1,|,1,|,1$|^1$')=1;
id |
Name |
Users |
1 |
Footbal |
1 |
2 |
Cooking |
178,1,202 |
Вариант с изменением структуры БД
На счет Вашей версии MySQL не уверен, но я побыстрому накидал как бы я организовывал таблицы. Разумеется, имена таблиц - дело вкуса. Возможно упустил какие-то моменты, так как редко пишу SQL
, но думаю основную суть смог передать — в журнале содержаться пары задача - пользователь
и они могут быть любыми валидными парами, т.е. на одну задачу может быть несколько пользователей и наоборот, но каждая запись отвечает за одну связь. Надеюсь Вам это поможет.
Schema (MySQL v5.7)
CREATE TABLE Users (
id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
Name VARCHAR (255) NOT NULL
);
CREATE TABLE Tasks (
id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
Name VARCHAR (255) NOT NULL
);
CREATE TABLE Journal (
id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
TaskID INT,
UserID INT,
INDEX ts_ind (TaskID),
INDEX us_ind (UserID),
FOREIGN KEY (TaskID) REFERENCES Tasks(id),
FOREIGN KEY (UserID) REFERENCES Users(id)
);
INSERT INTO Users (Name)
VALUES
("Peter"),
("Masha");
INSERT INTO Tasks (Name)
VALUES
("Footbal"),
("Cooking"),
("Shopping");
INSERT INTO Journal (TaskID, UserID)
VALUES
(1, 1),
(2, 2),
(3, 1);
Query #1
SELECT
Tasks.Name as task,
Users.Name as user
FROM
Journal
LEFT JOIN Users ON Journal.UserID = Users.id
LEFT JOIN Tasks ON Journal.TaskID = Tasks.id
WHERE
UserID = 1;
task |
user |
Footbal |
Peter |
Shopping |
Peter |
View on DB Fiddle