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] 2 3 »

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

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

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

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

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

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

  4. 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=стопицот
    Хотя мне больше нравится с радиусом. Это более естественно.

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

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

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

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

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

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

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

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

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

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

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

    ГИС пишешь?

Страницы: [1] 2 3 »

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