Сортировка ключей в MySQL
Сортировка данных в MySQL в примерах
Мало ли кому понадобится…
Пример использования.
< ?
function timeMeasure() {
list($msec, $sec) = explode(chr(32), microtime());
return ($sec+$msec);
}
define("TIMESTART",timeMeasure());
/* Определение настроек подключения к MySQL-серверу. */
define("DB_HOST", "sql_host");
define("DB_USER", "sql_user");
define("DB_PASS", "sql_pass");
define("DB_BASE", "sql_base");
$mysql = new sqlClass();
$mysql->open(DB_HOST, DB_USER, DB_PASS, DB_BASE);
$sort = new sort_keys();
$sort->mysql = &$mysql;
$tables = array('table' => 'id', 'table2' => 'id2');
$sort->update_keys($tables);
echo"
";
?>
< ?
///////////////////////////////////////////////////////////////
/*
*
* Класс сортировки ключей в таблицах MySQL.
* Автор файла: niga (izra) izra.ru
* Версия: 1.0
* Для работы необходим класс для работы с MySQL или прямые руки.
*
*/
///////////////////////////////////////////////////////////////
class sort_keys {
var $keys = array();
var $new_keys = array();
var $old_keys = array();
var $mysql = false;
// Последний элемент массива
#
# Примечание: необходимо всязи с глюком array_search(array_pop($array), $array);
#
function last_key($array) {
return array_pop($array);
}
// Проверка существования таблиц и ключей.
function search_table($table, $id) {
$tables_r = $this->mysql->query("SHOW TABLES FROM `".DB_BASE."`");
while ($tables_row = $this->mysql->fetch_row($tables_r)) {
if ($table == $tables_row[0]) {
// Таблица найдена.
$status_r = $this->mysql->query("SHOW INDEX FROM `".$table."` FROM `".DB_BASE."`");
while ($status_row = $this->mysql->fetch_row($status_r)) {
if ($status_row[4] == $id) {
// Ключ найден.
return true;
}
}
}
}
return false;
}
// Создание массива ключей.
function make_new_keys() {
for ($i=1;$i < array_search ($this->last_key($this->keys), $this->keys)+1;++$i) {
if (!array_key_exists($i, $this->keys)) {
// Последний элемент массива.
$last_key = array_search($this->last_key($this->keys), $this->keys);
// Массив новых ключей.
$this->new_keys[$i] = $this->keys[$last_key];
// Массив старых ключей.
$this->old_keys[$i] = array_search($this->keys[$last_key], $this->keys);
unset($this->keys[$last_key]);
}
}
}
function update_keys($tables) {
if (!$this->mysql) {
echo "Необходимо соединение с MySQL сервером.";
}
$error = false;
if (!is_array($tables) or empty($tables)) {
echo "Укажите таблицы и индексы.";
return false;
}
$i=0;
foreach ($tables as $table => $key) {
if ($i == 0) {
if ($this->search_table($table, $key)) {
// Таблица и ключ найден.
$keys_r = $this->mysql->query("SELECT `".$key."` FROM `".$table."`");
while ($keys_row = $this->mysql->fetch_row($keys_r)) {
// Создаем массив неотсортированных ключей.
$this->keys[$keys_row[0]] = $keys_row[0];
}
} else {
// Ошибка.
echo "Таблица ".$table." не существует, либо отсутствует индекс ".$key;
unset($tables[$table]);
$error = true;
}
}
}
// Создание ключей.
$this->make_new_keys();
foreach ($this->new_keys as $key => $value)
foreach ($tables as $table => $id)
$this->mysql->query("UPDATE `".$table."` SET `".$id."` = ".$key." WHERE `".$id."` = ".$this->old_keys[$key]);
if (!$error)
echo "Операция успешно завершена.";
}
}
class sqlClass {
var $connection;
var $count_query = 0;
var $count_time = 0;
function open($host,$user,$pass,$base,$port=3306) {
$host = trim($host);
$user = trim($user);
$pass = trim($pass);
$base = trim($base);
$port = trim($port);
$this->connection = false;
if (empty($host) or empty($user) or empty($pass) or empty($base) or !eregi("^[0-9]+$", $port))
exit("Данные для подключения не корректны.");
if (!$this->connection = @mysql_pconnect($host.':'.$port,$user,$pass))
exit("Невозможно подключиться к серверу баз данных.");
if (!mysql_select_db($base, $this->connection))
exit("Небозможно найти БД ".$base);
if ($this->info() >= 4)
$this->query("SET NAMES cp1251");
return $this->connection;
}
function query($query) {
if (!empty($query)) {
$time_before = $this->get_time();
if ($this->result = mysql_query($query, $this->connection)) {
$return = $this->result;
}
$this->count_time += $this->get_time() - $time_before;
$this->count_query++;
return $return;
}
}
function get_time() {
list($seconds, $microSeconds) = explode(' ', microtime());
return ((float)$seconds + (float)$microSeconds);
}
function info() {
$info = mysql_get_server_info();
$info = substr($info, 0, strpos($info, "-"));
$info = split("\.", $info);
return $info[0];
}
function fetch_row($result) {
if (!is_resource($result))
return false;
$row = @mysql_fetch_row($result);
return $row;
}
}
?>
Чичто случайно сюда попал, ну очень всё нравится, отличный сайт, так держать !!!
Sergey-maker, спасибо… Так и держим.
Может сортировка мне и не потребуется, но все равно спасибо)
117. $this->query(«SET NAMES cp1251»);
а как здесь поменять на другую кодировку? (не нужна utf-8)
117. $this->query(”SET NAMES utf-8″);
так пробывал?)
Мальчики, к чему все это, куда сортировать?)
На сколько я поняла… это поля в базе сортируют! ^_^
Если вам не нужна никакая сортировка в MySQL, то зачем вообще читать этот пост?
$result = mysql_query («SELECT ячейка FROM таблица ORDER BY ячейка DESC»,$db);
ASC или DESC. Смотря, как надо сортировать.