Я должен фильтровать записи, извлекая их из таблицы SQL. Я хочу, чтобы значения в том же поле в столбце моей таблицы в sql не отображались снова

#mysql #sql

#mysql #sql

Вопрос:

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

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

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

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

Я хочу, чтобы a показывал только бесплатную еду

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

Комментарии:

1. Какую СУБД вы используете?

2. Xampp Phpmyadmin

3. Xampp Phpmyadmin не являются СУБД. MySQL есть.

Ответ №1:

В вашей таблице есть повторяющаяся информация, и вы этого не хотите. DRY !.

Я бы использовал другую таблицу для хранения специализации, например :

Специальность

  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      |
  

Просмотр в скрипке DB