私はプロジェクトに取り組んでおり、クエリで立ち往生しています:
Wi-Fiに基づいた何らかのGPSを作成したいと考えています。2 つのテーブル (ユーザーと場所) があり、結果を 3 番目のテーブルに入れる必要があります。
最初のテーブルは、ユーザーの電話からの情報が送信される場所です。
電話の MAC アドレスとワイヤレス アクセス ポイントの MAC と信号強度。ユーザーの電話には、複数のワイヤレス アクセス ポイントが表示されます。
2 番目のテーブルには、すべての既知のワイヤレス アクセス ポイントが座標 (緯度と経度) とともに保存されます。
ここにテーブルがあります:
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