- 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;
}