Я пытаюсь выполнить запрос и вытянуть результаты в таблицу на PHP.
Запрос работает, однако он не завершает самую необходимую часть.
Мне нужназапрос, чтобы иметь возможность выбрать самую последнюю запись, ТОГДА проверьте, является ли RSSI БОЛЬШЕ, чем -60, однако его выбор самой записи записи, ГДЕ RSSI БОЛЬШЕ, чем -60.
Например, если пользователь«присутствует», что означает, что их RSSI меньше -60, однако, если они перемещаются дальше, а их RSSI изменяется на -70, то их не следует искать в этом запросе, однако запрос выбирает самый последний случай, когда онибольше -60.
Ниже мой код:
SELECT studentDetails.firstName,studentDetails.lastName,studentDetails.pictureLocation,probeSniffer.mac_address,probeSniffer.time_Stamp,probeSniffer.rssi,MAX(probeSniffer.time_Stamp) FROM probeSniffer
Inner join studentDetails
On probeSniffer.mac_address=studentDetails.mac_address
WHERE probeSniffer.mac_address
in
(SELECT probeSniffer.mac_address FROM probeSniffer WHERE probeSniffer.time_Stamp between (time('now', 'localtime', studentDetails.time_Range)) AND time('now', 'localtime'))
AND probeSniffer.mac_address in (SELECT probeSniffer.mac_address FROM probeSniffer WHERE probeSniffer.rssi <= 0 AND probeSniffer.rssi >= studentDetails.rssi_range order by probeSniffer.time_Stamp desc)
GROUP BY probeSniffer.mac_address
Это забирает пользователя, однако, если они уходят, они все еще подобраны.
Есть идеи?
СОЗДАТЬ ТАБЛИЦЫ:
CREATE TABLE probeSniffer (logID INTEGER UNIQUE, mac_address TEXT,vendor TEXT,ssid TEXT, date_Stamp TEXT, time_Stamp TEXT, rssi NUMERIC, bssid TEXT, PRIMARY KEY(logID))
CREATE TABLE `studentDetails` ( studentID INTEGER UNIQUE, firstName TEXT, lastName TEXT, mac_address TEXT, pictureLocation TEXT, rssi_range TEXT, time_Range TEXT, PRIMARY KEY(studentID) )
РЕЗУЛЬТАТ:
"Jason" "Mills" "images/man.png" "00:04:4b" "15:05:16" "-70" "15:05:16"
"Andy" "Harvey" "images/man.png" "8c:f5:a3" "15:02:22" "-79" "15:02:22"
ОЖИДАЕМЫЙ РЕЗУЛЬТАТ: Нет, так как последние значения RSSI меньше -60,однако его собирает самую последнюю запись о том, чтоru Они были больше -60.
Например, если вы немного изменили запрос:
SELECT studentDetails.firstName,studentDetails.lastName,studentDetails.pictureLocation,probeSniffer.mac_address,probeSniffer.time_Stamp,probeSniffer.rssi,MAX(probeSniffer.time_Stamp) FROM probeSniffer
Inner join studentDetails
On probeSniffer.mac_address=studentDetails.mac_address
WHERE
probeSniffer.time_Stamp between (time('now', 'localtime', studentDetails.time_Range)) AND time('now', 'localtime')
AND probeSniffer.rssi >= studentDetails.rssi_range
GROUP BY probeSniffer.mac_address
Результат будет:
"Jason" "Mills" "images/man.png" "00:04:4b" "15:05:42" "-60" "15:05:42"
"Andy" "Harvey" "images/man.png" "8c:f5:a3" "14:43:13" "-49" "14:43:13"
INSERT INTO:
INSERT INTO `studentDetails`(`studentID`,`firstName`,`lastName`,`mac_address`,`pictureLocation`,`rssi_range`,`time_Range`) VALUES (NULL,Andy,Harvey,8c:f5:a3,images/man.png,-60,-60 minutes);
INSERT INTO `studentDetails`(`studentID`,`firstName`,`lastName`,`mac_address`,`pictureLocation`,`rssi_range`,`time_Range`) VALUES (NULL,Jason,Mills,8c:f5:a4,images/man.png,-60,-60 minutes);
INSERT INTO `studentDetails`(`studentID`,`firstName`,`lastName`,`mac_address`,`pictureLocation`,`rssi_range`,`time_Range`) VALUES (NULL,Bob,Harris,8c:f5:a5,images/man.png,-60,-60 minutes);