Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: liczenie odległości na płaszczyźnie
Forum PHP.pl > Forum > Bazy danych > MySQL
acainoks
WITAM,
ogromny problem z MYSQL poniżej wyświetlam kod...
dlaczego gdy tbl_city.X - from_X przy odejmowaniu wychodzi wartość ogromna (nie realna) a przy dodawaniu wychodzi wartość mniejsza
skąd to się bierze?

  1. mysql> DESCRIBE tbl_city;
  2. +-------------+------------------+------+-----+---------+----------------+
  3. | FIELD | Type | NULL | KEY | DEFAULT | Extra |
  4. +-------------+------------------+------+-----+---------+----------------+
  5. | cityID | int(10) UNSIGNED | NO | PRI | NULL | AUTO_INCREMENT |
  6. | name | varchar(128) | YES | | NULL | |
  7. | X | int(10) UNSIGNED | NO | | NULL | |
  8. | Y | int(10) UNSIGNED | NO | | NULL | |
  9. | zalozenie | int(10) UNSIGNED | NO | | NULL | |
  10. | zalozyciele | int(10) UNSIGNED | NO | | NULL | |
  11. | capitol | tinyint(1) | YES | | NULL | |
  12. | STATUS | tinyint(1) | YES | | NULL | |
  13. | colony | tinyint(4) | NO | | NULL | |
  14. | development | tinyint(1) | NO | | NULL | |
  15. | type | varchar(10) | NO | | NULL | |
  16. | provinceID | int(10) UNSIGNED | NO | | NULL | |
  17. | userID | int(10) UNSIGNED | NO | | NULL | |
  18. | level | int(10) UNSIGNED | NO | | NULL | |
  19. | mineType | varchar(15) | NO | | NULL | |
  20. +-------------+------------------+------+-----+---------+----------------+
  21. 15 rows IN SET (0.00 sec)
  22.  
  23. mysql> DESCRIBE tbl_trade_offer;
  24. +---------------+------------------+------+-----+---------+----------------+
  25. | FIELD | Type | NULL | KEY | DEFAULT | Extra |
  26. +---------------+------------------+------+-----+---------+----------------+
  27. | trade_offerID | int(10) UNSIGNED | NO | PRI | NULL | AUTO_INCREMENT |
  28. | offer | varchar(10) | NO | | NULL | |
  29. | search | varchar(10) | NO | | NULL | |
  30. | offer_ | int(10) UNSIGNED | NO | | NULL | |
  31. | search_ | int(10) UNSIGNED | NO | | NULL | |
  32. | from_ | int(10) UNSIGNED | NO | | NULL | |
  33. | from_X | int(10) UNSIGNED | NO | | NULL | |
  34. | from_Y | int(10) UNSIGNED | NO | | NULL | |
  35. | speed | int(10) UNSIGNED | NO | | NULL | |
  36. | times | int(10) UNSIGNED | NO | | NULL | |
  37. | merchants | int(10) UNSIGNED | NO | | NULL | |
  38. +---------------+------------------+------+-----+---------+----------------+
  39. 11 rows IN SET (0.00 sec)
  40.  
  41. mysql> SELECT offer, offer_, search, search_,tbl_city.X-from_X, tbl_city.Y-from_Y, speed, round((sqrt((tbl_city.X - from_X)^2 + (tbl_city.Y - from_Y)^2) /6)/ speed*3600/36) AS time FROM tbl_trade_offer, tbl_city WHERE cityID =40;
  42. +-------+--------+--------+---------+----------------------+-------------------+-------+------------+
  43. | offer | offer_ | search | search_ | tbl_city.X-from_X | tbl_city.Y-from_Y | speed | time |
  44. +-------+--------+--------+---------+----------------------+-------------------+-------+------------+
  45. | wood | 9 | wood | 9 | 18446744073709551314 | 103 | 10 | 7158278827 |
  46. +-------+--------+--------+---------+----------------------+-------------------+-------+------------+
  47. 1 row IN SET (0.00 sec)
  48.  
  49. mysql> SELECT offer, offer_, search, search_,tbl_city.X+from_X, tbl_city.Y-from_Y, speed, round((sqrt((tbl_city.X - from_X)^2 + (tbl_city.Y - from_Y)^2) /6)/ speed*3600/36) AS time FROM tbl_trade_offer, tbl_city WHERE cityID =40;
  50. +-------+--------+--------+---------+-------------------+-------------------+-------+------------+
  51. | offer | offer_ | search | search_ | tbl_city.X+from_X | tbl_city.Y-from_Y | speed | time |
  52. +-------+--------+--------+---------+-------------------+-------------------+-------+------------+
  53. | wood | 9 | wood | 9 | 5666 | 103 | 10 | 7158278827 |
  54. +-------+--------+--------+---------+-------------------+-------------------+-------+------------+
  55. 1 row IN SET (0.00 sec)
  56.  
  57. mysql> SELECT offer, offer_, search, search_,x, y,from_x, from_y,tbl_city.X- from_X, tbl_city.Y-from_Y, speed, round((sqrt((tbl_city.X - from_X)^2 + (tbl_city.Y - from_Y)^2) /6)/ speed*3600/36) AS time FROM tbl_trade_offer, tbl_city WHERE cityID =40;
  58. +-------+--------+--------+---------+------+------+--------+--------+----------------------+-------------------+-------+------------+
  59. | offer | offer_ | search | search_ | x | y | from_x | from_y | tbl_city.X- from_X | tbl_city.Y-from_Y | speed | time |
  60. +-------+--------+--------+---------+------+------+--------+--------+----------------------+-------------------+-------+------------+
  61. | wood | 9 | wood | 9 | 2682 | 2827 | 2984 | 2724 | 18446744073709551314 | 103 | 10 | 7158278827 |
  62. +-------+--------+--------+---------+------+------+--------+--------+----------------------+-------------------+-------+------------+
  63. 1 row IN SET (0.00 sec)
  64.  
  65.  
  66. mysql>
rocktech.pl
Witam.

  1. ALTER TABLE tbl_city CHANGE COLUMN `X` `X` INT(10) SIGNED NOT NULL, CHANGE COLUMN `Y` `Y` INT(10) SIGNED NOT NULL ;
  2. ALTER TABLE tbl_trade_offer CHANGE COLUMN `from_X` `from_X` INT(10) SIGNED NOT NULL, CHANGE COLUMN `from_Y` `from_Y` INT(10) SIGNED NOT NULL ;


Poczytaj o --sql-mode=NO_UNSIGNED_SUBTRACTION.
acainoks
dzięki rocktech.pl

Pozamieniałem, zmieniłem także mode i nadal to nic nie dało
czy coś jeszcze ?
rocktech.pl
Spróbuj użyć CAST jako SIGNED. Ewentualnie alter na FLOAT ...
acainoks
  1. mysql> SELECT -4^2;
  2. +----------------------+
  3. | -4^2 |
  4. +----------------------+
  5. | 18446744073709551614 |
  6. +----------------------+
  7. 1 row IN SET (0.00 sec)
  8.  
  9. mysql> SELECT CAST(-4 AS UNSIGNED)^2;
  10. +------------------------+
  11. | CAST(-4 AS UNSIGNED)^2 |
  12. +------------------------+
  13. | 18446744073709551614 |
  14. +------------------------+
  15. 1 row IN SET (0.00 sec)
  16.  
  17. mysql> SELECT pow(-4,2);
  18. +-----------+
  19. | pow(-4,2) |
  20. +-----------+
  21. | 16 |
  22. +-----------+
  23. 1 row IN SET (0.00 sec)

myślę że nie potrzeba komentarza
dzięki za mode... smile.gif
sazian
http://dev.mysql.com/doc/refman/5.0/en/bit-functions.html
znaczek ^ to XOR a nie potęgowanie smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.