singlepost

Несколько вопросов по MySQL… << На главную или назад  

Есть таблица `map`(
`id` mediumint(7) unsigned default null,
`x` smallint(5) unsigned not null,
`y` smallint(5) unsigned not null,
`income` varchar(10) default null
)

1) Можно ли сделать ключом связку `x` и `y` – то есть x может повторяться, y может повторяться, но одновременно – нет. Или только если в одну строку их объединить а потом разбивать уже с помощью пхп?

2) Как сделать выборку такого плана – найти координаты x,y где id = 1 к примеру и потом получить все данные где координаты равны полученным +- 3. То есть в радиусе трех клеток.

26 ответов в теме “Несколько вопросов по MySQL…”

  1. 26
    Кирилл Быков ответил:

    НАТАРЫ — НПЦшники. Как собрался делать?

  2. 25
    Роман Чваников ответил:

    НПЦшники – то есть?))
    Делаю чуть ли не один-в-один, только более современную… А-ля редАлерт3 онЛайн))
    А по поводу замысловатых маршрутов – нахрен мне оно не сдалось! маршрут все равно не показывается, нигде не выводится – просто на его основе рассчитывается время прибытия войск. Так что там буду простым вычитанием координат делать =)

  3. 24
    Кирилл Быков ответил:

    Но для твоей игрушки этого будет явно недостаточно. У меня спецуха с заточкой под ГИС, дипломчик серьёзный был, если чё, обращайся, просвещу по индексам тоже, чтоб шустрее работало. Только лучше не в личку, а здесь темы создавай, пусть люди почитают.

  4. 23
    Роман Чваников ответил:

    Нет, почему… Игра то web, там надо что – карту вывести, иметь возможность "ходить" по ней – перелистывая страницы и просматривая соседние локации и рассчитывать расстояние от места x1,y1 до x2,y2. Если слышал про игрушку "травиан" – то там как раз такая карта используется…)

  5. 22
    Кирилл Быков ответил:

    А расстояние рассчитывать — все клетки доступны, или нет? А то вдруг по пересечёнке нельзя ходить, и приходится строить замысловатые маршруты?

  6. 21
    Кирилл Быков ответил:

    //ru.wikipedia.org/wiki/Травиан

  7. 20
    Роман Чваников ответил:

    Ну, для неискушенных юзеров подобных сервисов, вроде меня, простенькой смотрелки с высчитыванием расстояний вполне хватает обычно…)

  8. 19
    Роман Чваников ответил:

    ГИС – эт че?
    Онлайн игру пишу)

  9. 18
    Кирилл Быков ответил:

    Загугли. ГеоИнформационныеСистемы. Пример — гугльмапс, йандексмапс, мапинфо, арквью, дубльгис, сёрфер и дохрена ещё. Ну ещё есть расширение оракла — spatial, кажися.

  10. 17
    Кирилл Быков ответил:

    Почитай. Познавательно будет в любом случае.

  11. 16
    Роман Чваников ответил:

    Я так и подумал) Нет, у меня цели немножко попроще…))

  12. 15
    Роман Чваников ответил:

    А вообще писать ГИС, когда каждый третий использует яндекс.карты, а первые два – гугльмапс – пустая трата времени ИМХО :)

  13. 14
    Кирилл Быков ответил:

    Не всегда. Если нужен специфический функционал, можно написать самому. В твоём случае, например :) Движок ландшафтовский, который будет рассчитывать сложность преодоления той или иной территории в том или ином направлении. Допустим, по песочку сложнее ходить, чем по асфальту и т.д.

  14. 13
    Кирилл Быков ответил:

    Или поиск кратчайшего маршрута. Тоже ГИСовая задача. В общем случае — оптимального.

  15. 12
    Роман Чваников ответил:

    я говорил про ГИС общего назначения.)

  16. 11
    Кирилл Быков ответил:

    Общего назначения? Думаешь, гугль — гис общего назначения? Как раз таки нет. Общего назначения ГИС малоизвестны в рядах обычных пользователей. Это Арквью, мапинфо например. А гугль — это самый простенький вариантик. Смотрелка карт с минимальными поисковыми возможностями, простейшими запросами.

  17. 10
    Роман Чваников ответил:

    Отлично, все работает!!! Спасибо! :)

  18. 9
    Кирилл Быков ответил:

    №6 лучше иметь дело с квадратом радиуса и длины.

  19. 8
    Кирилл Быков ответил:

    №8 обращайся.

  20. 7
    Кирилл Быков ответил:

    ГИС пишешь?

  21. 6
    Роман Чваников ответил:

    Ух ты! *побежал пробовать*
    Спасиб!)))

  22. 5
    Владимир Муромский ответил:

    Можно и с радиусом. Формулу длины вектора знаешь? Вот эту длину нужно сравнивать в радиусом:)

  23. 4
    Кирилл Быков ответил:

    Не забудь unique key сделать на пару x,y.
    Твой запрос:
    select b.x,b.y from map a inner join map b on (3>=abs(a.x-b.x) and 3>=abs(a.y-b.y)) where id=стопицот
    Хотя мне больше нравится с радиусом. Это более естественно.

  24. 3
    Роман Чваников ответил:

    По поводу первого уже разобрался сам, не успел отписать, но все равно спасибо. По поводу второго – да, Кирилл, ты прав… :)
    Владимир, а одним запросом это можно сделать?

  25. 2
    Кирилл Быков ответил:

    Это не в радиусе, а в квадрате со стороной в 6 единиц.

  26. 1
    Владимир Муромский ответил:

    1) Можно. Порекомендую отличный сайт php.su, тебе в раздел Документация MySQL
    2) SELECT x, y FROM … WHERE id = 1
    SELECT * FROM … WHERE x > … AND x < … AND y > … AND y < …

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.