Chce zrobic w programie taka jakby liste ACL dla uzytkownikow z informacja co uzytkownicy moga zrobic a czego nie moga, wiec stworzylem sobie taka tabele:
CREATE TABLE IF NOT EXISTS `$this->usersAclTable` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` VARCHAR( 32 ) NOT NULL ,
`value` BOOL NOT NULL DEFAULT '0',
`login` VARCHAR( 32 ) NOT NULL
)
problem pojawia się gdy chce zaktualizować jakiś wpis, nie chce tego robić za pomocą pola id bo w momecie aktualizowania znam jedynie pola name i value, więc robie coś takiego:
"DELETE FROM `$this->usersAclTable` WHERE `name`=\\0 AND `login`=\\1", array($what, $login));
"INSERT INTO `$this->usersAclTable` SET `name`=\\0, `login`=\\1, `value`=\\2", array($what, $login, $value));
Jak mozna sie domyslic moje pytanie brzmi, jak to zrobic jednym zapytaniem?
Moge niby zrobic jakies UNIQUE pole z jakims hashem ustawienia i po prostu ON DUPLICATE KEY UPDATE no ale za bardzo eleganckie to nie bedzie. Zalezaloby mi tez zeby rozwiazanie bylo jakies standardowe (korzystam z MySQL ale swiat sie na nim nie konczy).
A moze zle do tego podchodze i powiniem inaczej rozplanowac ten system (kontrakt tego wyglada tak, ze mam /chce miec/ metody bool User.getPermission(string), void User.setPermission(string, string) i Map<string, bool> User.getPermissions())? bo rzeczywiscie w tym momecie WHERE nie odnosi sie do indeksow czyli dostep jest liniowy jesli dobrze mysle.
BTW, za krotkie to pole tematu zeby zadac pytanie :)