I have made a patch which enables display of all articles that belong to multiple categories. Thus, for example, Category:Female/Orthodox/Saint would return all female orthodox saints (that is, all articles which are categorised with at least [[Category:Female]], [[Category:Orthodox]] and [[Category:Saint]]).
I am not sure would this make for much greater database load, but that remains to be seen in practice. Line if(strchr($t,"/")) { and corresponding else block are actually not needed but I have left them because I figure that display of a single category is slightly faster this way, and that at that point it would be easier to turn off this feature if needed. It should also be easy to limit to number of categories if that turns out to be neccesary.
Index: Parser.php =================================================================== RCS file: /cvsroot/wikipedia/phase3/includes/Parser.php,v retrieving revision 1.135 diff -u -3 -p -r1.135 Parser.php --- Parser.php 15 May 2004 00:29:07 -0000 1.135 +++ Parser.php 30 May 2004 09:11:00 -0000 @@ -318,7 +318,21 @@ class Parser
# FIXME: add limits $t = wfStrencode( $this->mTitle->getDBKey() ); - $sql = "SELECT DISTINCT cur_title,cur_namespace FROM cur,categorylinks WHERE cl_to='$t' AND cl_from=cur_id ORDER BY cl_sortkey" ; + $t = preg_replace("'/+'","/",$t); + if(strchr($t,"/")) { + $ta = explode("/",$t); + $tt="cur"; $tw=""; + + $i=0; + foreach($ta as $v) { + $tt.=",categorylinks as cl$i"; + $tw.="cl$i.cl_to='$v' AND cl$i.cl_from=cl".++$i.".cl_from AND "; + } + $tw=preg_replace("' AND cl[0-9]+[.]cl_from=cl[0-9]+[.]cl_from AND $'U","",$tw); + $sql="SELECT DISTINCT cur_title,cur_namespace FROM $tt WHERE $tw AND cl0.cl_from=cur_id ORDER BY cl0.cl_sortkey"; + } else { + $sql = "SELECT DISTINCT cur_title,cur_namespace FROM cur,categorylinks WHERE cl_to='$t' AND cl_from=cur_id ORDER BY cl_sortkey" ; + } $res = wfQuery ( $sql, DB_READ ) ; while ( $x = wfFetchObject ( $res ) ) $data[] = $x ;