Я должен фильтровать записи, получая из таблицы SQL Я хочу, чтобы значения в том же поле в столбце моей таблицы в sql больше не отображались - PullRequest
0 голосов
/ 12 апреля 2019

Я не могу это сделать, пожалуйста, помогите. В коде, который я написал ниже, есть два значения в Specialty для идентификатора программы 1. Так есть способ фильтрации, чтобы значения не отображались снова в отфильтрованных результатах, то есть бесплатный обед, как указано здесь. Во время фильтрации я получаю флажок, как показано ниже, при извлечении из базы данных.

Бесплатное питание, Бесплатный обед

б Бесплатный обед

c Бесплатный ужин

Я хочу показать только бесплатное питание

INSERT INTO `programs` (`ProgramID`, `UserID`,`Speciality`) VALUES
(1, 'huy45', 'Free meal, Free lunch'),
(2, 'ga32','Free lunch'),
(3, 'sharvar3','Free Dinner'),

1 Ответ

0 голосов
/ 12 апреля 2019

В вашей таблице есть повторяющиеся данные, и вы не хотите этого. 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...