09/10/2018, 23:04

Giúp mình viết câu truy vấn này cái

Có một bảng có 2 trường tọa độ x và y (số nguyên).
Mình muốn tìm bản ghi nào thỏa mãn điềukiện là khoảng cách từ điểm (x,y) của bản ghi đó tới một điểm (x1,y1) bất kì là gần nhất.
Cơ sở dữ liệu mình dùng là MySQL.
Ngoài cách dùng truy vấn query thông thường thì liệu còn cách nào khác không nhỉ?
Cảm ơn các bạn!
scripter viết 01:05 ngày 10/10/2018
Bạn query tất cả các rows sau đó làm một function so sánh các khoảng cách có được từ 1 điểm bạn khai báo cho trước với từng điểm trong tất cả các điểm bạn query được. Nên nhớ là phương trình độ dài đường thẳng của 1 đoạn bất kỳ là: sqrt(pow(x - xo) + pow(y - yo)).
lovephp viết 01:07 ngày 10/10/2018
sqrt(pow(x - xo) + pow(y - yo)) -> độ dài đoạn thẳng đây ah, nhìn không ra luôn

vậy là như thế này?

select x, y, min(sqrt(pow((x - xo),2) + pow((y - yo),2)) as length from table

với xo và yo cho trước, kết quả sẽ tra về 1 row có nếu bảng có dữ liệu

thằng mysql ngày càng lợi hại, nhìn mấy câu query khủng luôn, phải đọc manual liên tục

Lấy hết rồi đem so sánh cũng được -> đúng ý bạn hỏi luôn
scripter viết 01:07 ngày 10/10/2018
Gõ lật đật mờ ^^, chứ hàm Pow tui đây ít dùng đến lắm.
shuto_uke viết 01:17 ngày 10/10/2018
Mình nghĩ một số câu query mà các bạn đưa ra đều kô chạy ổn.
Mình định dùng như sau (chuẩn so sánh kc của mình hơi khác một tí):
select ID,TenDiem,min(abs(x-x1)+abs(y-y1)) as mini from BangDiem group by ID,TenDiem
order by mini
Bài liên quan
0