MySQL is one of the fastest Database Engine with simple queries, though it is not so fast on with complex queries.
Thus, we should divide queries simple as possible.
eg) permission system between categories and groups:
CREATE TABLE cat (
`cid` int NOT NULL default 0,
`name` varchar(255) NOT NULL default '',
PRIMARY KEY (cid)
) TYPE=MyISAM ;
CREATE TABLE cat_perm (
`cid` int NOT NULL default 0,
`gid` int NOT NULL default 0,
PRIMARY KEY (cid,gid)
) TYPE=MyISAM ;
CREATE TABLE item (
`id` int NOT NULL default 0,
`cid` int NOT NULL default 0,
`name` varchar(255) NOT NULL default '',
PRIMARY KEY (id),
KEY (cid)
) TYPE=MyISAM ;
SELECT item.* FROM item LEFT JOIN cat_perm ON cat_perm.cid=item.cid WHERE cat_perm.gid=1;
SELECT cid FROM cat_perm WHERE gid=1;
SELECT * FROM item WHERE cid IN (cid list);
これは、MySQLのJOINの設計がかなり悪いということなんでしょうか。
MySQLがPHPと違うサーバにある場合はちょっと事情が変わりそうですね。
こんな構造の場合、SQL書きを得意としている人間は、ついつい