Нестандартная сотировка выборки из 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 коммент.Ограничение использования GPRS трафика на Android OS
Обзавёлся тут на днях гуглофоном Acer Liquid. И сразу же столкнулся с проблемой - очень много программ то и дело ломятся в интернет. Пока сидишь через wi-fi - не беда, но вот когда выползаешь в город, а программы всё также продолжают лезть в интернет, но уже через gprs - это напрягает. Конечно те у кого безлимитный мобильный интернет могут эту заметку вообще не читать, а тем кто уже столкнулся с такой проблемой, но ещё её не решил - рекомендую к прочтению.
Немного погуглив нашёл 3 программы, которые сейчас совместно и использую: APNdoid - с его помощью можно запретить доступ устройства к интернету через 3G/EDGE/GPRS. 3G Watchdog - мониторит 3G/GPRS трафик, устанавливается лимит. DroidWall - андроидовский фронтэнд к iptables.
С помощью этой троицы можно: DroidWall включайте в white-list mode (разрешать доступ в интернет только выбранным программам), разрешить доступ всем программам через wi-fi и только выбранным через GPRS. Это отсечёт весь GPRS трафик от нежелательных программ, при этом оставив им полную свободу действий когда вы подключены к wi-fi. Далее в 3G Watchdog настраиваете лимит трафика на период (1мб в день, например), устанавливаете даёте ему указание блокировать весь 3G/GPRS трафик по достижению лимита через APNdroid.
Всё, теперь Вы, во-первых сами выбираете программы которым разрешаете доступ в интернет через gprs, во-вторых контролируете объём разрешённого им трафика, и в-третьих автоматически запрещаете всякий доступ в интернет через gprs по достижению назначенного вами лимита.
От https://api.oscar.aol.com/aim/startOSCARSession получен неожиданный ответ: Ok
Как оказалось это ни что иное, как ошибка SSL handshake. Исправляется это отключением SSL: заходим в Управление учетными записями, выбираем свою учетную запись и жмем Изменить. В открывшемся окне переходим на вкладку - Дополнительно и убираем галочку с пункта Использовать SSL.
pidginicqimdesktop0 коммент.Сортировать 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]