RG-soft.com

всякое разное об этих ваших интернетах

Все записи с меткой "mysql"

Обновление MySQL до 5.1 в Debian Squeeze
При обновлении Debian с Lenny до Squeeze у некоторых из вас может возкникнуть ошибка при установке MySQL 5.1. Выглядит это дело примерно вот так:

Setting up mysql-server-5.1 (5.1.49-3) ...
Stopping MySQL database server: mysqld.
110128 17:10:57 [Note] Plugin 'FEDERATED' is disabled.
110128 17:10:57 InnoDB: Started; log sequence number 0 44233
110128 17:10:57 InnoDB: Starting shutdown...
110128 17:11:03 InnoDB: Shutdown completed; log sequence number 0 44233
Starting MySQL database server: mysqld . . . . . . . . . . . . . . failed!
invoke-rc.d: initscript mysql, action "start" failed.
dpkg: error processing mysql-server-5.1 (--configure):
subprocess installed post-installation script returned error exit status 1
dpkg: dependency problems prevent configuration of mysql-server:
mysql-server depends on mysql-server-5.1; however:
Package mysql-server-5.1 is not configured yet.
dpkg: error processing mysql-server (--configure):
dependency problems - leaving unconfigured
configured to not write apport reports
configured to not write apport reports
Errors were encountered while processing:
mysql-server-5.1
mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)


А лечится всё предельно просто: в папке /etc/mysql переименуйте текущий my.cnf в my.cnf.backup (или просто удалите), а на его место поставьте my.cnf.dpkg-dist, находящийся в этой-же папке.

 
linux debian mysql базы данных
0 коммент.
Нестандартная сотировка выборки из MySQL
Ещё одна небольшая проблемка, которую удалось решить, а решением поделиться со всеми. Представьте себе ситуацию: игра в покер, есть стол, и таблица игроков. За столом, допустим, 8 мест, а играют 5 игроков, притом позиции у всех разные, допустим 1, 3, 4, 6, 8. В каждом новом хенде выбирается дилер, предположим, что сейчас это игрок на 4 позиции, соответственно мне надо выбрать всех игроков за текущим столом, но по порядку, начиная с дилера, т.е. чтобы в выборке было 4, 6, 8, 1, 3.

Сначала я хотел сделать это через usort, но проблема в том, что функцию сравнения передаётся только 2 параметра, а нужен был 3й - дилер. Можно, конечно, было написать класс в котором и была бы прописана функция сравнения, а дилер устанавливался как свойство при создании объекта, но как оказалось есть куда более элегантное решение:

SELECT * FROM `players` WHERE `table`='id стола' ORDER BY `position`<4, `position`


Вот такой вот незамысловатый запрос сразу вернёт строки в нужном расположении, а всё благодаря тому, что MySQL поддерживает логические выражения в ORDER BY.

 
mysql базы данных php веб-программирование
0 коммент.
Сортировать varchar как int в MySQL
Возникла недавно достаточно неожиданная проблема. Была таблица с номерами офисов, и в этих номерах помимо самого номера бывали ещё и литеры (101а, 205б и т.д.), поэтому поле в базе данных пришлось делать varchar.

Вместе с тем стояла задача сортировать эти записи по номеру офиса, и вот здесь возникла проблема: сортировка, как и следовало ожидать, шла как строки, т.е. по каждому следующему символу. Поэтому запрос: SELECT `onum` FROM `offices` ORDER BY `onum` ASC выдавал 1, 109, 12, 146, когда я, конечно же, хотел бы видеть 1, 12, 109, 146.

Немножко погуглив решение таки было найдено: функция CAST. И вот уже запрос SELECT `onum` FROM `offices` ORDER BY CAST(`onum` AS UNSIGNED) возвращал всё как надо. Другие возможные конвертации для CAST:

BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL[(M[,D])]
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]

 
mysql базы данных php веб-программирование
0 коммент.