PDA

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



shuto_uke
17-04-2006, 09:52
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!

bete
17-04-2006, 10:36
Thân gửi bạn,

Bạn có thể xài công thức:

khoảng cách = căn bậc 2(bình phương(x1-x2)+ bình phương(y1-y2))

hoặc:

bình phương(khoảng cách) = bình phương(x1-x2)+ bình phương(y1-y2)

Xài MySQL (và cơ sở dữ liệu nói chung) thì tiện nhưng không nhanh cho lắm (với bài toán này). Có các cấu trúc dữ liệu cây khác có thể giải quyết tốt hơn B+Tree cho loại bài này như: kd-tree, k-d-b-tree, r tree, r+ tree, r* tree, ... Nhưng bạn phải tự cài đặt lấy :(

(có gì sai sót mong được góp ý, xin cám ơn)

-thân

shuto_uke
17-04-2006, 14:05
Thank bete,
Cái mình quan tâm là viết câu truy vấn như thế nào thôi. Vì môi trường làm việc của mình là web: PHP + MySql nên có lẽ mình kô thể dùng cách nào khác.
Mình định dùng truy vấn như sau nhưng thấy kô hay lắm:
select ID,TenDiem,min(abs(x-x1)+abs(y-y1)) as mini from BangDiem group by ID,TenDiem
order by mini

bete
19-04-2006, 08:01
Thân gửi shuto-uke: nếu cách bạn làm mà chạy đủ nhanh rồi thì
tui nghĩ không cần sửa làm gì

-thân