Autor | Zpráva | ||
---|---|---|---|
t4nn3r Profil * |
#1 · Zasláno: 5. 1. 2010, 15:57:04
Ahoj mam mensi problem se spojovanim tabulek v dotazu. Snazim se udelat ACL pro account manager pro mangos.
Mam relacni tabulku acl_users, ta obsahuje tri sloupce accountid (odkaz na ID accountu mangos tabulky s accountama) groupid (odkaz na ID skupiny v tabulce acl_groups) a info (neni relace, nechano pro admina .. pro pripadny strceni do skupiny BAN aby se vedelo proc apod ...) No a z tohodle potrebuju udelat nasledujici dotaz select username from realmd.account where id in (select accountid from acl_users)+ select groupname from acl_groups where id in (select groupid from acl_users )+ select info from acl_users. Nevite nekdo jak tohle pospojovat do jednoho dotazu ? (Zapsat to jako vice dotazu mi nepomuze) diky |
||
Joker Profil |
#2 · Zasláno: 5. 1. 2010, 15:59:01
|
||
t4nn3r Profil * |
#3 · Zasláno: 5. 1. 2010, 16:22:37
Ano myslim join, ale proste jsem logiku joinu nepochopil ... Zkousel jsem to ruzne ale vzdy mi PDO akorat zobrazil silenou vyjimku, ze ktere clovek taky neni moudry
|
||
Joker Profil |
#4 · Zasláno: 5. 1. 2010, 16:31:11
Příklad:
SELECT * FROM acl_users u JOIN acl_groups g ON u.groupid=g.id t4nn3r: „zobrazil silenou vyjimku, ze ktere clovek taky neni moudry“ Člověk není moudrý z takovéhohle popisu, když sem napíšete ten dotaz a jakou chybu to hodí, třeba z toho někdo moudrý bude. |
||
Kajman_ Profil * |
#5 · Zasláno: 5. 1. 2010, 16:37:23
Můžete zkusit uvést příklad dat v tabulkách a chtěný výstup? Třeba pak bude dotaz jasnější.
Jestli chcete připojit za sebe více řádků z různých dotazů a počet a typ sloupců odpovídá, pomůže union místo těch plusek. |
||
t4nn3r Profil * |
#6 · Zasláno: 5. 1. 2010, 16:42:51
no tabulka accout:
CREATE TABLE IF NOT EXISTS `account` ( `id` int(11) unsigned NOT NULL COMMENT 'Identifier', `username` varchar(32) NOT NULL, `sha_pass_hash` varchar(40) NOT NULL DEFAULT '', `gmlevel` tinyint(3) unsigned NOT NULL DEFAULT '0', `sessionkey` longtext, `v` longtext, `s` longtext, `email` text, `joindate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `last_ip` varchar(30) NOT NULL DEFAULT '0.0.0.0', `failed_logins` int(11) unsigned NOT NULL DEFAULT '0', `locked` tinyint(3) unsigned NOT NULL DEFAULT '0', `last_login` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', `active_realm_id` int(11) unsigned NOT NULL DEFAULT '0', `expansion` tinyint(3) unsigned NOT NULL DEFAULT '0', `mutetime` bigint(40) unsigned NOT NULL DEFAULT '0', `locale` tinyint(3) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `idx_username` (`username`), KEY `idx_gmlevel` (`gmlevel`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; tabulka acl_groups: CREATE TABLE IF NOT EXISTS `acl_groups` ( `id` int(2) NOT NULL AUTO_INCREMENT, `name` varchar(20) COLLATE utf8_bin NOT NULL, `protected` int(1) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=14 ; a relacni tabulka acl_users: CREATE TABLE IF NOT EXISTS `acl_users` ( `account` int(20) NOT NULL, `group` int(2) NOT NULL, `info` text COLLATE utf8_bin NOT NULL, PRIMARY KEY (`account`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; potrebuju vypsat pro dalsi pouziti v ACL tabulku acl_users, kde account je odkaz na account.id a group je odkaz na acl_groups.id |
||
t4nn3r Profil * |
#7 · Zasláno: 5. 1. 2010, 16:44:55
takze vystup by mel byt: account.usermane, acl_groups.name, info
|
||
Joker Profil |
#8 · Zasláno: 5. 1. 2010, 16:49:37
t4nn3r:
No tak analogicky k tomu, co jsem psal v [#4]: SELECT a.username, g.name, u.info FROM acl_users u JOIN acl_groups g ON u.group = g.id JOIN account a ON *** ...kde místo *** bude podmínka, podle jaké se dá do spojení dohledat odpovídající záznam v tabulce account. |
||
t4nn3r Profil * |
#9 · Zasláno: 5. 1. 2010, 16:54:07
no hele diky za odpoved, a koukam zezt tohodle sem konecne pochopil jak pouzivat join :)
|
||
Časová prodleva: 14 let
|
0