Релиз NetBeans IDE 7.0
На днях увидела свет новая версия, пожалуй, лучшей бесплатной IDE. Нового в этой версии: поддержка HTML5 Поддержка Git 1.7.х PHP Rename Refactoring Line wrapping и различные другие плюшки
netbeansidephppythonjavac++веб-программированиебазы данных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.
Вместе с тем стояла задача сортировать эти записи по номеру офиса, и вот здесь возникла проблема: сортировка, как и следовало ожидать, шла как строки, т.е. по каждому следующему символу. Поэтому запрос: 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]