- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
/**
	* Выполняет запрос SELECT
	*
	* @param string  $tables      Список таблиц, разделённый запятыми
	* @param string  $condition   Условие для выборки (WHERE)
	* @param string  $order       Поля для сортировки (ORDER BY)
	* @param string  $fields      Список полей для получения
	* @param int     $lim_rows    Максимльное количество получаемых записей
	* @param int     $lim_offset  Начальное смещение для выборки
	* @param string  $group       Поле для группировки
	* @param bool    $distinct    Вернуть только уникальные записи
	*
	* @return array
	*/
	function select($tables, $condition = '', $order = '', $fields = '', $lim_rows = 0, $lim_offset = 0, $group = '', $distinct = false)
	{
		if (is_bool($fields) || $fields == '1' || $fields == '0' || !is_numeric($lim_rows)) {
			# Обратная совместимость c 1.2.x
			$desc = $fields;
			$fields = $lim_rows ? $lim_rows : '*';
			$lim_rows = $lim_offset;
			$lim_offset = $group;
			$group = $distinct;
			$distinct = func_num_args() == 9 ? func_get_arg(8) : false;
			$query = 'SELECT ';
			if ($distinct) $query .= 'DISTINCT ';
			if (!strlen($fields)) $fields = '*';
			$tables = str_replace('`' ,'', $tables);
			$tables = preg_replace('/([\w.]+)/i', '`'.$this->prefix.'$1`', $tables);
			$query .= $fields." FROM ".$tables;
			if (strlen($condition)) $query .= " WHERE $condition";
			if (strlen($group)) $query .= " GROUP BY $group";
			if (strlen($order)) {
				$query .= " ORDER BY $order";
				if ($desc) $query .= ' DESC';
			}
			if ($lim_rows) {
				$query .= ' LIMIT ';
				if ($lim_offset) $query .= "$lim_offset, ";
				$query .= $lim_rows;
			}
		} else {
			$query = 'SELECT ';
			if ($distinct) $query .= 'DISTINCT ';
			if (!strlen($fields)) $fields = '*';
			$tables = str_replace('`','',$tables);
			$tables = preg_replace('/([\w.]+)/i', '`'.$this->prefix.'$1`', $tables);
			$query .= $fields." FROM ".$tables;
			if (strlen($condition)) $query .= " WHERE ".$condition;
			if (strlen($group)) $query .= " GROUP BY ".$group."";
			if (strlen($order)) {
				$order = explode(',', $order);
				for($i = 0; $i < count($order); $i++) switch ($order[$i]{0}) {
					case '+': $order[$i] = substr($order[$i], 1); break;
					case '-': $order[$i] = substr($order[$i], 1).' DESC'; break;
				}
				$query .= " ORDER BY ".implode(', ',$order);
			}
			if ($lim_rows) {
				$query .= ' LIMIT ';
				if ($lim_offset) $query .= "$lim_offset, ";
				$query .= $lim_rows;
			}
		}
		$result = $this->query_array($query);
		return $result;
	}