Доброе утро наверно опишу сначала логику.. Есть максимальный диапазон чисел от 0 да 65535 ага.. При достижении максимального числа, далее скидывается счетчик на 0, тобишь: 65533, 65534, 65535, 0, 1, 2, 3 как то так... Есть два столбца в БД - X и Y Вобщем, мозг сломал всю ночь, чертов диапазон не могу сделать. делаю так: Код (Text): SELECT X, Y, LVL FROM MAP_CASTLE WHERE X IN ( 1,2 ) AND Y IN ( 1,2 ) фуй Код (Text): SELECT X, Y, LVL FROM MAP_CASTLE WHERE ( X BETWEEN 1 AND 2 ) AND ( Y BETWEEN 1 AND 2 ) фуй Код (Text): SELECT X, Y, LVL FROM MAP_CASTLE WHERE ( X >= 1 AND X <= 2 ) AND ( Y >= 1 AND Y <= 2 ) с LIMIT тоже пруха... если сначала от 65533 до 3 вообщем... как голову сломать чтобы правильно работало ?
Выбирался диапазон с двух столбцов. Сначала логику хотелось понять почему не работает это: Код (Text): SELECT X, Y, LVL FROM MAP_CASTLE WHERE X IN (1,2) AND Y < 9 --- Добавлено --- чтоб вывелось 1 = 1 1 = 2 1 = 3 ... 1 = 8 2 = 1 2 = 2 ... 2 = 8
Спойлер: второй имг http://imgur.com/a/2jJdF По первому... есть диапазон начальный X:6 Y:65530 Финишный: X:65530 Y:6 высчитывание переменные все есть. Мне просто нужно составить единственный запрос чтобы диапазон чисел высчитывался, а не крутился в цикле 144 раза Спойлер: ... Код (Text): X: 6 / Y: 65530 X: 5 / Y: 65530 X: 4 / Y: 65530 X: 3 / Y: 65530 X: 2 / Y: 65530 X: 1 / Y: 65530 X: 0 / Y: 65530 X: 65535 / Y: 65530 X: 65534 / Y: 65530 X: 65533 / Y: 65530 X: 65532 / Y: 65530 X: 65531 / Y: 65530 X: 65530 / Y: 65530 X: 6 / Y: 65531 X: 5 / Y: 65531 X: 4 / Y: 65531 X: 3 / Y: 65531 X: 2 / Y: 65531 X: 1 / Y: 65531 X: 0 / Y: 65531 X: 65535 / Y: 65531 X: 65534 / Y: 65531 X: 65533 / Y: 65531 X: 65532 / Y: 65531 X: 65531 / Y: 65531 X: 65530 / Y: 65531 X: 6 / Y: 65532 X: 5 / Y: 65532 X: 4 / Y: 65532 X: 3 / Y: 65532 X: 2 / Y: 65532 X: 1 / Y: 65532 X: 0 / Y: 65532 X: 65535 / Y: 65532 X: 65534 / Y: 65532 X: 65533 / Y: 65532 X: 65532 / Y: 65532 X: 65531 / Y: 65532 X: 65530 / Y: 65532 X: 6 / Y: 65533 X: 5 / Y: 65533 X: 4 / Y: 65533 X: 3 / Y: 65533 X: 2 / Y: 65533 X: 1 / Y: 65533 X: 0 / Y: 65533 X: 65535 / Y: 65533 X: 65534 / Y: 65533 X: 65533 / Y: 65533 X: 65532 / Y: 65533 X: 65531 / Y: 65533 X: 65530 / Y: 65533 X: 6 / Y: 65534 X: 5 / Y: 65534 X: 4 / Y: 65534 X: 3 / Y: 65534 X: 2 / Y: 65534 X: 1 / Y: 65534 X: 0 / Y: 65534 X: 65535 / Y: 65534 X: 65534 / Y: 65534 X: 65533 / Y: 65534 X: 65532 / Y: 65534 X: 65531 / Y: 65534 X: 65530 / Y: 65534 X: 6 / Y: 65535 X: 5 / Y: 65535 X: 4 / Y: 65535 X: 3 / Y: 65535 X: 2 / Y: 65535 X: 1 / Y: 65535 X: 0 / Y: 65535 X: 65535 / Y: 65535 X: 65534 / Y: 65535 X: 65533 / Y: 65535 X: 65532 / Y: 65535 X: 65531 / Y: 65535 X: 65530 / Y: 65535 X: 6 / Y: 0 X: 5 / Y: 0 X: 4 / Y: 0 X: 3 / Y: 0 X: 2 / Y: 0 X: 1 / Y: 0 X: 0 / Y: 0 X: 65535 / Y: 0 X: 65534 / Y: 0 X: 65533 / Y: 0 X: 65532 / Y: 0 X: 65531 / Y: 0 X: 65530 / Y: 0 X: 6 / Y: 1 X: 5 / Y: 1 X: 4 / Y: 1 X: 3 / Y: 1 X: 2 / Y: 1 X: 1 / Y: 1 X: 0 / Y: 1 X: 65535 / Y: 1 X: 65534 / Y: 1 X: 65533 / Y: 1 X: 65532 / Y: 1 X: 65531 / Y: 1 X: 65530 / Y: 1 X: 6 / Y: 2 X: 5 / Y: 2 X: 4 / Y: 2 X: 3 / Y: 2 X: 2 / Y: 2 X: 1 / Y: 2 X: 0 / Y: 2 X: 65535 / Y: 2 X: 65534 / Y: 2 X: 65533 / Y: 2 X: 65532 / Y: 2 X: 65531 / Y: 2 X: 65530 / Y: 2 X: 6 / Y: 3 X: 5 / Y: 3 X: 4 / Y: 3 X: 3 / Y: 3 X: 2 / Y: 3 X: 1 / Y: 3 X: 0 / Y: 3 X: 65535 / Y: 3 X: 65534 / Y: 3 X: 65533 / Y: 3 X: 65532 / Y: 3 X: 65531 / Y: 3 X: 65530 / Y: 3 X: 6 / Y: 4 X: 5 / Y: 4 X: 4 / Y: 4 X: 3 / Y: 4 X: 2 / Y: 4 X: 1 / Y: 4 X: 0 / Y: 4 X: 65535 / Y: 4 X: 65534 / Y: 4 X: 65533 / Y: 4 X: 65532 / Y: 4 X: 65531 / Y: 4 X: 65530 / Y: 4 X: 6 / Y: 5 X: 5 / Y: 5 X: 4 / Y: 5 X: 3 / Y: 5 X: 2 / Y: 5 X: 1 / Y: 5 X: 0 / Y: 5 X: 65535 / Y: 5 X: 65534 / Y: 5 X: 65533 / Y: 5 X: 65532 / Y: 5 X: 65531 / Y: 5 X: 65530 / Y: 5 X: 6 / Y: 6 X: 5 / Y: 6 X: 4 / Y: 6 X: 3 / Y: 6 X: 2 / Y: 6 X: 1 / Y: 6 X: 0 / Y: 6 X: 65535 / Y: 6 X: 65534 / Y: 6 X: 65533 / Y: 6 X: 65532 / Y: 6 X: 65531 / Y: 6 X: 65530 / Y: 6 они есть Мне лишь понять почему два IN не работают с BETWEEN
Насколько я понял, ТС хочет из _диапазона_ получить _список_ посредством запроса. Ох и долго же он будет получать ... пока не поймёт, как работает SELECT.
допустим. Но почему у него в примере они идут группами по шесть? и какое правило их создания? Что он вообще хочет? выбрать с карты соседей?
Насколько я сейчас понимаю, есть игровое пространство с круглой землёй. При переходе через координату 65535 (или через ноль при движении в обратную сторону) игрок попадает на ту же карту но с другого конца. Есть матрица объектов в этом пространстве с координатами x и y. Значения столбцов x и y гарантированно находятся в пределах от 0 до 65535. Требуется выбрать все объекты, попадающие в "окно". Окно соответствует экрану компа, это часть карты, притом внутри окна может оказаться граница 0-65535. А может и не оказаться. Решение простое как шар: Тебе надо до вызова sql запроса, видимо на php, узнать будет ли в пределах окна граница карты. Если нет, то используйте простой between. Если есть, то используй два between через or. Обосраться тут можно напутав где or а где and. И ещё надо не жалеть скобок, т.к. приоритет операций or и and разный, это может привести к непониманию. --- Добавлено --- Вспомнил название: изометрическая тайловая карта. А задача - скроллинг экрана в пределах карты.
Код (Text): SELECT X, Y FROM MAP_CASTLE WHERE ( X BETWEEN 1 AND 2 ) AND ( Y BETWEEN 1 AND 2 ) Не робит array {} а через OR получаю то что и за пределами диапазона --- Добавлено --- красным обведено то что не должно быть --- Добавлено --- Спойлер: ............................ Это все просчитанно, переменные есть по скрину не получается. и да и нет, не факт. Я скрипты выложу после решения проблем, поиграете Из двух диапазонов !
@MouseZver, ты неправильно используешь OR и AND. и красным ты обвел какую-то полную xyйню. ты не должен выбирать икс из одной строки и игрек из другой, это чушь. SELECT выбирает строки — было бы логично обвести пары значений (X,Y) Запомни: - когда тебе надо чтобы выполнилась проверка для обеих координат X и Y, надо использовать операцию AND Код (Text): ( X BETWEEN 1 AND 2 ) AND ( Y BETWEEN 1 AND 2 ) но! конкретно числа 1 и 2 какие-то сомнительные, слишком маленький диапазон. --- Добавлено --- допустим вот такое условие уже выбрало бы правдоподобные данные: Код (Text): ( X BETWEEN 1 AND 10 ) AND ( Y BETWEEN 61 AND 70) это эквивалентно попаданию в квадрат размером 10x10 --- Добавлено --- Случай, когда нужен OR: - когда тебе нужно одну координату проверить на возможное попадание в два диапазона: в начале карты и в конце. То есть когда окно включает в себя переход через ноль. Одним битвином тут никак не получится проверить. Код (Text): ( X BETWEEN 0 AND 9 ) OR ( X BETWEEN 65525 AND 65535 ) --- Добавлено --- --------------------------- Сдаётся мне ты не готов к этой информации. Ты просто пытаешся всё, что увидел сразу вставить в код, не понимая. Давай ты сначала закрепишь как-то общее представление о том, как работает SELECT…WHERE, чем OR отличается от AND, а уже потом будешь добавлять сюда какую-то геометрию и преобразования координат, ок? Сейчас тебе требуется перепрыгнуть через пару уровней, это нереально, я считаю.
Сделал песочницу для проверки преобразования координат в закольцованном мире и построения SQL. http://codepad.org/nJAsRNxe
блин , спасибо за все, особенно за фразу эту. Решение в руках было... диапазон был на столько маленький, что в таких координатах объектов просто не было . С самого начала "Может там тупо нет таких записей?" - Весь день угробил когда решение в 1 посту уже было... Теперь выложу карты на стол: https://yadi.sk/d/thVf9V5n3Fb3nC Скрипт i.php cоздает карту ввиде простого изображения. На нем размещаются объекты(замки) по своим нужным координатам. Все. Убрав сетку можно закомментировав 50 строку сервисМап(). Строка 202 отвечает за диаметр создаваемой карты GlobalsMap::init( 54 ); Закомментированные строки с 104 по 126 - это боковые стрелки. Зачем вообще это делаю? - Хобби, просто --- Добавлено --- Это круто! но не стал прибегать к этому --- Добавлено --- бло, смещение по Х на 1 пиксель --- Добавлено --- Coordinate раздвоить надо будет для X и Y
имаге редактором быстрее начертишь аббревиатуру чем в БД строить INSERT VALUE ()()()()()()()()()()()()()()()()() http://imgur.com/a/hgKjE