В вашей таблице есть повторяющиеся данные, и вы не хотите этого. DRY! .
Я бы использовал другую таблицу для хранения специальности, например:
Specialty
id | name
----+-------------
1 | Free meal
2 | Free lunch
3 | Free dinner
Так что вы можете легко использоватьвнешний ключ для хранения такой информации в вашей таблице programs
Далее, вы не хотите хранить сериализованную информацию.Это противоречит цели использования СУБД.
Я бы структурировал таблицу programs
следующим образом:
ProgramID | UserID | SpecialityID
-----------+------------+--------------
1 | 'huy45' | 1
1 | 'huy45' | 2
2 | 'ga32' | 2
3 | 'sharvar3' | 3
Для извлечения ProgramID
, UserID
и Speciality
для имени специальности 'Free meal'
вы можете использовать этот запрос:
SELECT p.`ProgramID`,
p.`UserID`,
s.`name` AS "Speciality Name"
FROM `programs` p
INNER JOIN `Speciality` s
ON p.SpecialityID = s.id
WHERE s.`name` = 'Free lunch';
Схема (MySQL v5.7)
CREATE TABLE Speciality (
`id` INTEGER,
`name` VARCHAR(11)
);
INSERT INTO Speciality
(`id`, `name`)
VALUES
(1, 'Free meal'),
(2, 'Free lunch'),
(3, 'Free dinner');
CREATE TABLE programs (
`ProgramID` INTEGER,
`UserID` VARCHAR(10),
`SpecialityID` INTEGER
);
INSERT INTO programs
(`ProgramID`, `UserID`, `SpecialityID`)
VALUES
(1, 'huy45', 1),
(1, 'huy45', 2),
(2, 'ga32', 2),
(3, 'sharvar3', 3);
Запрос № 1
SELECT p.`ProgramID`,
p.`UserID`,
s.`name` AS "Speciality Name"
FROM `programs` p
INNER JOIN `Speciality` s
ON p.SpecialityID = s.id
WHERE s.`name` = 'Free lunch';
| ProgramID | UserID | Speciality Name |
| --------- | ------ | --------------- |
| 1 | huy45 | Free lunch |
| 2 | ga32 | Free lunch |
Просмотр на БД Fiddle