#20
>Hvis jeg bruger en db opsætning som i dit eksempel, hvordan får jeg så sendt program navnet med og den korrekte info retur?<
så du anvender ikke program navnet, men dens id.
og lave en dropdown med program navn, og id som value burde ikke volde problemer.
med udgangt punkt i denne mysql database tested i phpmyadmin, sql statement burde være ens.
CREATE TABLE `tbl_map_user_program` (
`id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`program_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci COMMENT='licens';
INSERT INTO `tbl_map_user_program` (`id`, `user_id`, `program_id`) VALUES
(1, 1, 1),
(2, 1, 3),
(3, 1, 4),
(4, 1, 6),
(5, 2, 2),
(6, 2, 6);
CREATE TABLE `tbl_program` (
`id` int(11) NOT NULL,
`name` varchar(25) COLLATE utf8_danish_ci NOT NULL,
`noter` varchar(255) COLLATE utf8_danish_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci;
INSERT INTO `tbl_program` (`id`, `name`, `noter`) VALUES
(1, 'windows 7', ''),
(2, 'windows 8.1', ''),
(3, 'windows 10', ''),
(4, 'office 2007', ''),
(5, 'office 2003', ''),
(6, 'office 365', ''),
(7, 'linux fedora', 'kræver ikke licens'),
(8, 'libre office', 'kræver ikke licens');
CREATE TABLE `tbl_user` (
`id` int(11) NOT NULL,
`firstname` varchar(25) COLLATE utf8_danish_ci NOT NULL,
`lastname` varchar(25) COLLATE utf8_danish_ci NOT NULL,
`licens_no` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci;
INSERT INTO `tbl_user` (`id`, `firstname`, `lastname`, `licens_no`) VALUES
(1, 'Ronny', 'Olsen', 123),
(2, 'test', 'testesen', 369);
ALTER TABLE `tbl_map_user_program`
ADD PRIMARY KEY (`id`);
ALTER TABLE `tbl_program`
ADD PRIMARY KEY (`id`);
ALTER TABLE `tbl_user`
ADD PRIMARY KEY (`id`);
ALTER TABLE `tbl_map_user_program`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7;
ALTER TABLE `tbl_program`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9;
ALTER TABLE `tbl_user`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
simpel hvem har user_id 1 ??SELECT * FROM tbl_user WHERE id=1
simpel hvem har licens_no 123 ??SELECT * FROM tbl_user WHERE licens_no=123
id, firstname, lastname, licens_no
1 Ronny Olsen 123
hvilke licens pligtige programmer har user_id 1 ??SELECT tbl_user.*, tbl_program.* FROM tbl_user JOIN tbl_map_user_program ON tbl_user.id = tbl_map_user_program.user_id JOIN tbl_program ON tbl_program.id = tbl_map_user_program.program_id WHERE tbl_user.id=1
id, firstname, lastname, licens_no, id, name, noter
1,Ronny,Olsen,123,1,windows 7,
1,Ronny,Olsen,123,3,windows 10,
1,Ronny,Olsen,123,4,office 2007,
1,Ronny,Olsen,123,6,office 365,
hvem har office 365 ??SELECT tbl_user.*, tbl_program.* FROM tbl_user JOIN tbl_map_user_program ON tbl_user.id = tbl_map_user_program.user_id JOIN tbl_program ON tbl_program.id = tbl_map_user_program.program_id WHERE tbl_program.id = 6
id,firstname,lastname,licens_no,id,name,noter
1,Ronny,Olsen,123,6,office 365,
2,test,testesen,369,6,office 365,
hvem har en licens pligtig office pakkeSELECT tbl_user.*, tbl_program.* FROM tbl_user JOIN tbl_map_user_program ON tbl_user.id = tbl_map_user_program.user_id JOIN tbl_program ON tbl_program.id = tbl_map_user_program.program_id WHERE tbl_program.id IN (4,5,6)
id,firstname,lastname,licens_no,id,name,noter
1,Ronny,Olsen,123,4,office 2007,
1,Ronny,Olsen,123,6,office 365,
2,test,testesen,369,6,office 365
nb hvis du har en mysql database kørende, kan du få lavet databasen om til sqlite med dette
https://sourceforge.net/projects/mysql2sqlite/kort tested, med ser lovende ud hvis man er til sqlite
arne_v har sikkert et andet database design i hoved, der også vil virke, men KISS
men tilbage til tegne bordet lav et database design du mener løser opgave, lav nogle test tabeller, og smid nogle test data i, og lav nogle sql statement, og se om du kan få de svar du ønsker.