选择语言 :

 Driver_Database_Driver_MySQL::_compile_selete

null Driver_Database_Driver_MySQL::_compile_selete( )
File: ./drivers/database/mysql/mysql.class.php
protected function _compile_selete($builder)
{
    $quote_ident = array($this, '_quote_identifier');

    $quote_table = array($this, 'quote_table');

    $query = 'SELECT ';

    if ($builder['distinct'])
    {
        if (true===$builder['distinct'])
        {
            $query .= 'DISTINCT ';
        }
        else
        {
            $builder['select_adv'][] = array
            (
                $builder['distinct'],
                'distinct',
            );
        }
    }

    $this->_init_as_table($builder);

    $this->format_select_adv($builder);

    if (empty($builder['select']))
    {
        $query .= '*';
    }
    else
    {
        $query .= implode(', ', array_unique(array_map($quote_ident, $builder['select'])));
    }

    if (!empty($builder['from']))
    {
        // Set tables to select from
        $query .= ' FROM ' . implode(', ', array_unique(array_map($quote_table, $builder['from'], array(true))));
    }

    if (!empty($builder['index']))
    {
        foreach ($builder['index'] as $item)
        {
            $query .= ' '.strtoupper($item[1]).' INDEX('.$this->_quote_identifier($item[0]).')';
        }
    }

    if (!empty($builder['join']))
    {
        // Add tables to join
        $query .= ' ' . $this->_compile_join($builder['join']);
    }

    if (!empty($builder['where']))
    {
        // Add selection conditions
        $query .= ' WHERE ' . $this->_compile_conditions($builder['where'], $builder['parameters']);
    }

    if (!empty($builder['group_by']))
    {
        // Add sorting
        $query .= ' GROUP BY ' . implode(', ', array_map($quote_ident, $builder['group_by']));
    }

    if (!empty($builder['having']))
    {
        // Add filtering conditions
        $query .= ' HAVING ' . $this->_compile_conditions($builder['having'], $builder['parameters']);
    }

    if (!empty($builder['order_by']))
    {
        // Add sorting
        $query .= ' ' . $this->_compile_order_by($builder['order_by']);
    }
    elseif ($builder['where'])
    {
        # 如果查询中有in查询,采用自动排序方式
        $in_query = null;
        foreach ($builder['where'] as $item)
        {
            if (isset($item['AND']) && $item['AND'][1] == 'in')
            {
                if (count($item['AND'][1]) > 1)
                {
                    # 大于1项才需要排序
                    $in_query = $item['AND'];
                }
                break;
            }
        }
        if ($in_query)
        {
            $query .= ' ORDER BY FIELD(' . $this->_quote_identifier($in_query[0]) . ', ' . implode(', ', $this->quote($in_query[2])) . ')';
        }
    }

    if ($builder['limit'] !== null)
    {
        // Add limiting
        $query .= ' LIMIT ' . $builder['limit'];
    }

    if ($builder['offset'] !== null)
    {
        // Add offsets
        $query .= ' OFFSET ' . $builder['offset'];
    }

    return $query;
}