我正在做一个项目,但我被困在一个查询上:
我想创建某种基于 wi-fi 的 GPS。有 2 个表(用户和位置),我需要将结果放在第三个表中。
第一个表是从用户手机发送信息的地方。
电话 MAC 地址和具有信号强度的无线接入点 MAC。用户手机可以看到多个无线接入点。
第二个表是所有已知无线接入点及其坐标(纬度和经度)的存储位置。
以下是表格:
Users
:
| PhoneMac | apMac | signal |
| user1 |11:11:11 | 20 |
| user1 |22:22:22 | 80 |
| user1 |33:33:33 | 50 |
| user1 |55:55:55 | 99 |
| user2 |11:11:11 | 60 |
| user3 |44:44:44 | 10 |
| user3 |11:11:11 | 90 |
Locations
桌子:
| apMac | Lat | Lon |
| 11:11:11 |10.000 |30.000 |
| 33:33:33 |30.000 |30.000 |
| 44:44:44 |40.000 |40.000 |
我需要一个从表中获取 apMac 的查询Users
,检查它们是否在Locations
表中,并从找到的那些中选择信号最强的那个。
所以结果应该是 PhoneMac 和所选 AP 的坐标。每个用户都应该这样做。
使用上面的表格应该是正确的结果:
| PhoneMac | Lat | Lon |
| user1 |30.000 |30.000 |
| user2 |10.000 |10.000 |
| user3 |10.000 |10.000 |
sql = "SELECT t1.PhoneMac, t1.apMac, t1.signal, t2.apMac, t2.lat, t2.lon,
COUNT(t1.MacTel) AS num
FROM users t1
INNER JOIN locations t2
ON t1.apMac=t2.apMac
GROUP BY t1.PhoneMac
ORDER BY num DESC";
这是我到目前为止的代码。我不知道如何包含有关选择apMac
最强信号的部分,因为现在它只返回apMac
列表中的第一个。