SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 03.12.2010 23:37:29

venom280
Участник
Зарегистрирован: 03.12.2010
Сообщений: 6

Помогите спроектировать запрос

Для одного PHP проекта сделал такую таблицу. Это карта с ячейками (x,y), которые можно занять.
Возможность занять - колонка `register`.


CREATE TABLE `map` (
 `x` smallint(4) unsigned NOT NULL,
 `y` smallint(4) unsigned NOT NULL,
 `img` varchar(100) NOT NULL,
 `possible` tinyint(1) NOT NULL,
 `register` tinyint(1) NOT NULL,
 `uid` mediumint(10) unsigned NOT NULL default '0',
 `tid` mediumint(10) unsigned NOT NULL default '0',
 PRIMARY KEY  (`x`,`y`,`register`),
 KEY `possible` (`possible`),
 KEY `register` (`register`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
 

Требуется выбирать из таблицы свободные ячейки. Делаю запрос вида

SELECT * FROM `map` WHERE x BETWEEN 0 AND 10 AND y BETWEEN 0 AND 10 AND register=1
 

Но проблема в том, в этом случае порядок ячеек будет:

x | y
0 | 0
0 | 1
0 | 2
0 | 3
....
 

Верхняя часть рисунка.

А мне нужно, чтобы ячейки выбирались "по спирали", т.е. постепенно заполняя карту, увеличивая радиус (Нижняя часть рисунка).

Есть ли у MySQL возможность отсортировать значения особым образом или может можно это сделать через хранимые процедуры.


Прикрепленные файлы:
Attachment Icon map.jpg, Размер: 17,306 байт, Скачано: 539

Неактивен

 

#2 04.12.2010 00:19:26

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Помогите спроектировать запрос

1. Почему Вы не хотите пересортировать их в PHP?
2. Можете написать ORDER BY x*x+y*y, x, -y — это будет честный радиус и правила
обхода по нему. Если нужна совсем честная спираль, то еще угол прийдется ввести smile

Неактивен

 

#3 04.12.2010 09:45:14

venom280
Участник
Зарегистрирован: 03.12.2010
Сообщений: 6

Re: Помогите спроектировать запрос

Не знал, что mysql так умеет

Неактивен

 

#4 04.12.2010 11:23:08

venom280
Участник
Зарегистрирован: 03.12.2010
Сообщений: 6

Re: Помогите спроектировать запрос

Спасибо огромное. Именно то, что нужно.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson