Autor | Zpráva | ||
---|---|---|---|
zacatecnik1 Profil * |
#1 · Zasláno: 15. 9. 2014, 12:50:00
Dobrý den,
strukturu tabulek i s ukázkovými daty přikládám níže. Jde o tabulku uživatelů a další tabulku jazyků, kdy uživatel může mít přirazen libovolný počet jazyků. Do teď jsem data vybíral tak, že jsem si vybral uživatele a v php v iteraci jsem při každém průchodu vytvářel nový select pro výběr jazyků. Při velkém množství uživatelů je to ovšem velmi neefektivní. Lze napsat pouze jeden SQL dotaz tak, abych byl select efektivní a nenáročný? Děkuji moc za rady. T. CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8_czech_ci NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci; INSERT INTO `user` (`id`, `name`) VALUES (1, 'Tomas'); CREATE TABLE `language` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `name` varchar(255) COLLATE utf8_czech_ci NOT NULL, `level` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `user_id` (`user_id`), CONSTRAINT `language_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `language` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci; INSERT INTO `language` (`id`, `user_id`, `name`, `level`) VALUES (1, 1, 'anglictina', 1), (2, 1, 'nemcina', 2), (3, 1, 'rustina', 1); |
||
Icka Profil * |
#2 · Zasláno: 15. 9. 2014, 12:56:06
Něco jako:
Select user.*, lang.* FROM user LEFT JOIN language AS lang ON lang.user_id = user.id |
||
Tori Profil |
Z hlediska návrhu by ovšem pro vztah M:N bylo správnější toto:
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8_czech_ci NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci; -- tady jenom jazyky CREATE TABLE `language` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8_czech_ci NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci; -- vazební tabulka uživatelů a jazyků CREATE TABLE `users_languages` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `language_id` int(11) NOT NULL, `level` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `user_id` (`user_id`), KEY `language_id` (`language_id`), CONSTRAINT `user_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `language_ibfk_1` FOREIGN KEY (`language_id`) REFERENCES `language` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci; |
||
zacatecnik1 Profil * |
#4 · Zasláno: 15. 9. 2014, 13:13:13
Icka:
to je přesně ono :) děkuji |
||
Časová prodleva: 10 let
|
0