За последние 24 часа нас посетили 20449 программистов и 1126 роботов. Сейчас ищут 725 программистов ...

Начало субботы

Тема в разделе "MySQL", создана пользователем MouseZver, 11 мар 2017.

  1. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    Доброе утро наверно :D

    опишу сначала логику..
    Есть максимальный диапазон чисел от 0 да 65535
    ага..
    При достижении максимального числа, далее скидывается счетчик на 0, тобишь:
    65533, 65534, 65535, 0, 1, 2, 3
    как то так...
    Есть два столбца в БД - X и Y
    Вобщем, мозг сломал всю ночь, чертов диапазон не могу сделать.

    делаю так:
    Код (Text):
    1. SELECT X, Y, LVL FROM MAP_CASTLE WHERE X IN ( 1,2 ) AND Y IN ( 1,2 )
    фуй :(
    Код (Text):
    1. SELECT X, Y, LVL FROM MAP_CASTLE WHERE ( X BETWEEN 1 AND 2 ) AND ( Y BETWEEN 1 AND 2 )
    фуй :(
    Код (Text):
    1. SELECT X, Y, LVL FROM MAP_CASTLE WHERE ( X >= 1 AND X <= 2 ) AND ( Y >= 1 AND Y <= 2 )
    с LIMIT тоже пруха... если сначала от 65533 до 3

    вообщем... как голову сломать чтобы правильно работало ?
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    А правильно это как?
    --- Добавлено ---
    Что значит "сделать диапазон"?
     
    MouseZver нравится это.
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    Выбирался диапазон с двух столбцов.
    Сначала логику хотелось понять почему не работает это:
    Код (Text):
    1. 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
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    [​IMG]
    --- Добавлено ---
    Может там тупо нет таких записей?
     
    MouseZver и denis01 нравится это.
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    ладненько. ты как скажешь. только не волнуйся. всё хорошо.
     
    MouseZver нравится это.
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    [​IMG]
    [​IMG]
    http://imgur.com/a/2jJdF

    По первому...

    есть диапазон начальный X:6 Y:65530
    Финишный: X:65530 Y:6

    высчитывание переменные все есть. Мне просто нужно составить единственный запрос чтобы диапазон чисел высчитывался, а не крутился в цикле 144 раза :eek:

    Код (Text):
    1. X: 6 / Y: 65530
    2. X: 5 / Y: 65530
    3. X: 4 / Y: 65530
    4. X: 3 / Y: 65530
    5. X: 2 / Y: 65530
    6. X: 1 / Y: 65530
    7. X: 0 / Y: 65530
    8. X: 65535 / Y: 65530
    9. X: 65534 / Y: 65530
    10. X: 65533 / Y: 65530
    11. X: 65532 / Y: 65530
    12. X: 65531 / Y: 65530
    13. X: 65530 / Y: 65530
    14. X: 6 / Y: 65531
    15. X: 5 / Y: 65531
    16. X: 4 / Y: 65531
    17. X: 3 / Y: 65531
    18. X: 2 / Y: 65531
    19. X: 1 / Y: 65531
    20. X: 0 / Y: 65531
    21. X: 65535 / Y: 65531
    22. X: 65534 / Y: 65531
    23. X: 65533 / Y: 65531
    24. X: 65532 / Y: 65531
    25. X: 65531 / Y: 65531
    26. X: 65530 / Y: 65531
    27. X: 6 / Y: 65532
    28. X: 5 / Y: 65532
    29. X: 4 / Y: 65532
    30. X: 3 / Y: 65532
    31. X: 2 / Y: 65532
    32. X: 1 / Y: 65532
    33. X: 0 / Y: 65532
    34. X: 65535 / Y: 65532
    35. X: 65534 / Y: 65532
    36. X: 65533 / Y: 65532
    37. X: 65532 / Y: 65532
    38. X: 65531 / Y: 65532
    39. X: 65530 / Y: 65532
    40. X: 6 / Y: 65533
    41. X: 5 / Y: 65533
    42. X: 4 / Y: 65533
    43. X: 3 / Y: 65533
    44. X: 2 / Y: 65533
    45. X: 1 / Y: 65533
    46. X: 0 / Y: 65533
    47. X: 65535 / Y: 65533
    48. X: 65534 / Y: 65533
    49. X: 65533 / Y: 65533
    50. X: 65532 / Y: 65533
    51. X: 65531 / Y: 65533
    52. X: 65530 / Y: 65533
    53. X: 6 / Y: 65534
    54. X: 5 / Y: 65534
    55. X: 4 / Y: 65534
    56. X: 3 / Y: 65534
    57. X: 2 / Y: 65534
    58. X: 1 / Y: 65534
    59. X: 0 / Y: 65534
    60. X: 65535 / Y: 65534
    61. X: 65534 / Y: 65534
    62. X: 65533 / Y: 65534
    63. X: 65532 / Y: 65534
    64. X: 65531 / Y: 65534
    65. X: 65530 / Y: 65534
    66. X: 6 / Y: 65535
    67. X: 5 / Y: 65535
    68. X: 4 / Y: 65535
    69. X: 3 / Y: 65535
    70. X: 2 / Y: 65535
    71. X: 1 / Y: 65535
    72. X: 0 / Y: 65535
    73. X: 65535 / Y: 65535
    74. X: 65534 / Y: 65535
    75. X: 65533 / Y: 65535
    76. X: 65532 / Y: 65535
    77. X: 65531 / Y: 65535
    78. X: 65530 / Y: 65535
    79. X: 6 / Y: 0
    80. X: 5 / Y: 0
    81. X: 4 / Y: 0
    82. X: 3 / Y: 0
    83. X: 2 / Y: 0
    84. X: 1 / Y: 0
    85. X: 0 / Y: 0
    86. X: 65535 / Y: 0
    87. X: 65534 / Y: 0
    88. X: 65533 / Y: 0
    89. X: 65532 / Y: 0
    90. X: 65531 / Y: 0
    91. X: 65530 / Y: 0
    92. X: 6 / Y: 1
    93. X: 5 / Y: 1
    94. X: 4 / Y: 1
    95. X: 3 / Y: 1
    96. X: 2 / Y: 1
    97. X: 1 / Y: 1
    98. X: 0 / Y: 1
    99. X: 65535 / Y: 1
    100. X: 65534 / Y: 1
    101. X: 65533 / Y: 1
    102. X: 65532 / Y: 1
    103. X: 65531 / Y: 1
    104. X: 65530 / Y: 1
    105. X: 6 / Y: 2
    106. X: 5 / Y: 2
    107. X: 4 / Y: 2
    108. X: 3 / Y: 2
    109. X: 2 / Y: 2
    110. X: 1 / Y: 2
    111. X: 0 / Y: 2
    112. X: 65535 / Y: 2
    113. X: 65534 / Y: 2
    114. X: 65533 / Y: 2
    115. X: 65532 / Y: 2
    116. X: 65531 / Y: 2
    117. X: 65530 / Y: 2
    118. X: 6 / Y: 3
    119. X: 5 / Y: 3
    120. X: 4 / Y: 3
    121. X: 3 / Y: 3
    122. X: 2 / Y: 3
    123. X: 1 / Y: 3
    124. X: 0 / Y: 3
    125. X: 65535 / Y: 3
    126. X: 65534 / Y: 3
    127. X: 65533 / Y: 3
    128. X: 65532 / Y: 3
    129. X: 65531 / Y: 3
    130. X: 65530 / Y: 3
    131. X: 6 / Y: 4
    132. X: 5 / Y: 4
    133. X: 4 / Y: 4
    134. X: 3 / Y: 4
    135. X: 2 / Y: 4
    136. X: 1 / Y: 4
    137. X: 0 / Y: 4
    138. X: 65535 / Y: 4
    139. X: 65534 / Y: 4
    140. X: 65533 / Y: 4
    141. X: 65532 / Y: 4
    142. X: 65531 / Y: 4
    143. X: 65530 / Y: 4
    144. X: 6 / Y: 5
    145. X: 5 / Y: 5
    146. X: 4 / Y: 5
    147. X: 3 / Y: 5
    148. X: 2 / Y: 5
    149. X: 1 / Y: 5
    150. X: 0 / Y: 5
    151. X: 65535 / Y: 5
    152. X: 65534 / Y: 5
    153. X: 65533 / Y: 5
    154. X: 65532 / Y: 5
    155. X: 65531 / Y: 5
    156. X: 65530 / Y: 5
    157. X: 6 / Y: 6
    158. X: 5 / Y: 6
    159. X: 4 / Y: 6
    160. X: 3 / Y: 6
    161. X: 2 / Y: 6
    162. X: 1 / Y: 6
    163. X: 0 / Y: 6
    164. X: 65535 / Y: 6
    165. X: 65534 / Y: 6
    166. X: 65533 / Y: 6
    167. X: 65532 / Y: 6
    168. X: 65531 / Y: 6
    169. X: 65530 / Y: 6
    они есть ;) Мне лишь понять почему два IN не работают с BETWEEN
     
  8. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Насколько я понял, ТС хочет из _диапазона_ получить _список_ посредством запроса. Ох и долго же он будет получать ... пока не поймёт, как работает SELECT. :)
     
    MouseZver нравится это.
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    допустим. Но почему у него в примере они идут группами по шесть? и какое правило их создания? Что он вообще хочет? выбрать с карты соседей?
     
    MouseZver нравится это.
  10. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    Насколько я сейчас понимаю, есть игровое пространство с круглой землёй. При переходе через координату 65535 (или через ноль при движении в обратную сторону) игрок попадает на ту же карту но с другого конца. Есть матрица объектов в этом пространстве с координатами x и y. Значения столбцов x и y гарантированно находятся в пределах от 0 до 65535.

    Требуется выбрать все объекты, попадающие в "окно". Окно соответствует экрану компа, это часть карты, притом внутри окна может оказаться граница 0-65535. А может и не оказаться.

    Решение простое как шар:
    Тебе надо до вызова sql запроса, видимо на php, узнать будет ли в пределах окна граница карты. Если нет, то используйте простой between. Если есть, то используй два between через or.

    Обосраться тут можно напутав где or а где and. И ещё надо не жалеть скобок, т.к. приоритет операций or и and разный, это может привести к непониманию.
    --- Добавлено ---
    Вспомнил название: изометрическая тайловая карта. А задача - скроллинг экрана в пределах карты.
     
    MouseZver нравится это.
  11. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    Код (Text):
    1. SELECT X, Y FROM MAP_CASTLE WHERE ( X BETWEEN 1 AND 2 ) AND ( Y BETWEEN 1 AND 2 )
    Не робит ;) array {}

    а через OR получаю то что и за пределами диапазона
    [​IMG]
    --- Добавлено ---
    красным обведено то что не должно быть :)
    --- Добавлено ---
    Это все просчитанно, переменные есть :) по скрину не получается.
    и да и нет, не факт. Я скрипты выложу после решения проблем, поиграете ;)
    Из двух диапазонов ! ;)
     
    #11 MouseZver, 11 мар 2017
    Последнее редактирование: 11 мар 2017
  12. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    @MouseZver, ты неправильно используешь OR и AND.
    и красным ты обвел какую-то полную xyйню. ты не должен выбирать икс из одной строки и игрек из другой, это чушь. SELECT выбирает строки — было бы логично обвести пары значений (X,Y) :D

    Запомни:
    - когда тебе надо чтобы выполнилась проверка для обеих координат X и Y, надо использовать операцию AND
    Код (Text):
    1. ( X BETWEEN 1 AND 2 ) AND ( Y BETWEEN 1 AND 2 )
    но! конкретно числа 1 и 2 какие-то сомнительные, слишком маленький диапазон.
    --- Добавлено ---
    допустим вот такое условие уже выбрало бы правдоподобные данные:
    Код (Text):
    1. ( X BETWEEN 1 AND 10 ) AND ( Y BETWEEN 61 AND 70)
    это эквивалентно попаданию в квадрат размером 10x10
    --- Добавлено ---
    Случай, когда нужен OR:
    - когда тебе нужно одну координату проверить на возможное попадание в два диапазона: в начале карты и в конце. То есть когда окно включает в себя переход через ноль. Одним битвином тут никак не получится проверить.
    Код (Text):
    1. ( X BETWEEN 0 AND 9 ) OR ( X BETWEEN 65525 AND 65535 )
    --- Добавлено ---
    ---------------------------
    Сдаётся мне ты не готов к этой информации. Ты просто пытаешся всё, что увидел сразу вставить в код, не понимая.
    Давай ты сначала закрепишь как-то общее представление о том, как работает SELECT…WHERE, чем OR отличается от AND, а уже потом будешь добавлять сюда какую-то геометрию и преобразования координат, ок?

    Сейчас тебе требуется перепрыгнуть через пару уровней, это нереально, я считаю.
     
    MouseZver нравится это.
  13. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    Сделал песочницу для проверки преобразования координат в закольцованном мире и построения SQL.
    http://codepad.org/nJAsRNxe
     
    MouseZver нравится это.
  14. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    блин :D, спасибо за все, особенно за фразу эту. Решение в руках было... диапазон был на столько маленький, что в таких координатах объектов просто не было :D. С самого начала "Может там тупо нет таких записей?" - :D:D:D:D:) Весь день угробил когда решение в 1 посту уже было...:D

    Теперь выложу карты на стол:
    https://yadi.sk/d/thVf9V5n3Fb3nC

    Скрипт i.php cоздает карту ввиде простого изображения. На нем размещаются объекты(замки) по своим нужным координатам. Все.
    Убрав сетку можно закомментировав 50 строку сервисМап().
    Строка 202 отвечает за диаметр создаваемой карты GlobalsMap::init( 54 ); :)
    Закомментированные строки с 104 по 126 - это боковые стрелки.
    Зачем вообще это делаю? - Хобби, просто :)
    --- Добавлено ---
    Это круто! но не стал прибегать к этому :)
    --- Добавлено ---
    бло, смещение по Х на 1 пиксель :mad:
    --- Добавлено ---
    Coordinate раздвоить надо будет для X и Y
     
  15. Mitai

    Mitai Новичок

    С нами с:
    23 окт 2016
    Сообщения:
    155
    Симпатии:
    24
    это будет, что то типо героев3? если да, то, я бы поиграл)
     
  16. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    а можно домиками ругательное слово написать?
     
  18. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    имаге редактором быстрее начертишь аббревиатуру чем в БД строить INSERT VALUE ()()()()()()()()()()()()()()()()()
    http://imgur.com/a/hgKjE