PageFinder::getQueryNumChildren PHP Method

getQueryNumChildren() protected method

Match a number of children count
protected getQueryNumChildren ( DatabaseQuerySelect $query, $selector )
$query DatabaseQuerySelect
    protected function getQueryNumChildren(DatabaseQuerySelect $query, $selector)
    {
        if (!in_array($selector->operator, array('=', '<', '>', '<=', '>=', '!='))) {
            throw new PageFinderSyntaxException("Operator '{$selector->operator}' not allowed for 'num_children' selector.");
        }
        $value = (int) $selector->value;
        $this->getQueryNumChildren++;
        $n = (int) $this->getQueryNumChildren;
        $a = "pages_num_children{$n}";
        $b = "num_children{$n}";
        if (in_array($selector->operator, array('<', '<=', '!=')) && $value || in_array($selector->operator, array('>', '>=', '!=')) && $value < 0 || ($selector->operator == '=' || $selector->operator == '>=') && !$value) {
            // allow for zero values
            $query->select("COUNT({$a}.id) AS {$b}");
            $query->leftjoin("pages AS {$a} ON ({$a}.parent_id=pages.id)");
            $query->groupby("HAVING COUNT({$a}.id){$selector->operator}{$value}");
            /* FOR REFERENCE
            			$query->select("count(pages_num_children$n.id) AS num_children$n"); 
            			$query->leftjoin("pages AS pages_num_children$n ON (pages_num_children$n.parent_id=pages.id)");
            			$query->groupby("HAVING count(pages_num_children$n.id){$selector->operator}$value"); 
            			*/
            return $b;
        } else {
            // non zero values
            $query->select("{$a}.{$b} AS {$b}");
            $query->leftjoin("(" . "SELECT p{$n}.parent_id, COUNT(p{$n}.id) AS {$b} " . "FROM pages AS p{$n} " . "GROUP BY p{$n}.parent_id " . "HAVING {$b}{$selector->operator}{$value} " . ") {$a} ON {$a}.parent_id=pages.id");
            $where = "{$a}.{$b}{$selector->operator}{$value}";
            $query->where($where);
            /* FOR REFERENCE
            			$query->select("pages_num_children$n.num_children$n AS num_children$n"); 
            			$query->leftjoin(
            				"(" . 
            				"SELECT p$n.parent_id, count(p$n.id) AS num_children$n " . 
            				"FROM pages AS p$n " . 
            				"GROUP BY p$n.parent_id " . 
            				"HAVING num_children$n{$selector->operator}$value" . 
            				") pages_num_children$n ON pages_num_children$n.parent_id=pages.id"); 
            
            			$query->where("pages_num_children$n.num_children$n{$selector->operator}$value");
            			*/
            return "{$a}.{$b}";
        }
    }