#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 |