[英]Creating a search box with results on map using php, pgadmin(SQL) and html
[英]PHP - Multiple SQL queries to a HTML table using search results
我發現了類似的主題,但是許多結果使用mysqli_multi_query,由於用戶生成查詢的將來實現,我希望避免這種情況。
目前,我正在使用以下PHP達到我想要的結果,但是我感覺缺少一種更有效的方法。 我也擔心並發查詢以及這種涉及的進程占用連接的可能性。 盡管任何時候的用戶負載不應大於20。
這是代碼,任何評論或見解都值得贊賞! (我仍在學習PHP,因此我的代碼在這方面可能很糟糕!):
表模式(它也需要工作-從本質上講,是開發最佳結構):
CREATE TABLE `EAM`(
`EAM_ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`EAM_IPADDR` VARCHAR(15) NOT NULL,
`EAM_PORT` INT(5) NOT NULL,
`EAM_STATE` VARCHAR(6) NOT NULL);
CREATE TABLE `ACTIVE`(
`EAM_ID` INT NOT NULL,
`ACTIVE_STATUS` VARCHAR(25) NOT NULL,
`ACTIVE_TIME` TIME DEFAULT NULL,
FOREIGN KEY (EAM_ID) REFERENCES EAM(EAM_ID));
CREATE TABLE `MAP_IMG` (
`MAP_IMG_BLDG` varchar(25) NOT NULL,
`MAP_IMG_ROOM` varchar(25) NOT NULL,
`MAP_IMG_X` int(8) DEFAULT NULL,
`MAP_IMG_Y` int(8) DEFAULT NULL,
`MAP_IMG_ROOM_STATUS` varchar(10) NOT NULL DEFAULT 'NOTCLEAR');
CREATE TABLE `LOCATION`(
`LOCATION_ROOM` VARCHAR(25) NOT NULL PRIMARY KEY,
`LOCATION_BLDG` VARCHAR(25) NOT NULL,
`EAM_ID` INT NOT NULL,
`LOCATION_COMMENT` VARCHAR(250) DEFAULT NULL,
FOREIGN KEY (EAM_ID) REFERENCES EAM(EAM_ID));
$dbQuery = "SELECT EAM_ID FROM LOCATION WHERE LOCATION_BLDG = 'LQ1'"; //TODO: Eventually make this 'LQ1' a variable for page selected.
$dbQueryResult = mysqli_query($dbConnection, $dbQuery) OR DIE("Bad Query: $dbQuery");
echo "<table class='table table-striped'><thead>";
echo "<tr><th>BUILDING</th>";
echo "<th>ROOM NUMBER</th>";
echo "<th>ROOM STATUS</th>";
echo "<th>LAST UPDATE</th>";
echo "<th>EAM IP ADDRESS</th>";
echo "<th>EAM PORT</th></tr></thead>";
while($row = mysqli_fetch_assoc($dbQueryResult)) {
$eamID = $row['EAM_ID']; //Assign EAM_ID from initial query to $eamID for use throughout subsequent queries.
$dbq2 = "SELECT LOCATION_BLDG, LOCATION_ROOM FROM LOCATION WHERE EAM_ID = $eamID";
$dbqr2 = mysqli_query($dbConnection, $dbq2) OR DIE("Bad Query: $dbq2");
while($r2 = mysqli_fetch_assoc($dbqr2)) {
echo "<tr><td>{$r2['LOCATION_BLDG']}</td>";
echo "<td>{$r2['LOCATION_ROOM']}</td>";
}
$dbq2 = "SELECT ACTIVE_STATUS, ACTIVE_TIME FROM ACTIVE WHERE EAM_ID = $eamID";
$dbqr2 = mysqli_query($dbConnection, $dbq2) OR DIE("Bad Query: $dbq2");
while($r2 = mysqli_fetch_assoc($dbqr2)) {
echo "<td>{$r2['ACTIVE_STATUS']}</td>";
echo "<td>{$r2['ACTIVE_TIME']}</td>";
}
$dbq2 = "SELECT EAM_IPADDR, EAM_PORT FROM EAM WHERE EAM_ID = $eamID";
$dbqr2 = mysqli_query($dbConnection, $dbq2) OR DIE("Bad Query: $dbq2");
while($r2 = mysqli_fetch_assoc($dbqr2)) {
echo "<td>{$r2['EAM_IPADDR']}</td>";
echo "<td>{$r2['EAM_PORT']}</td></tr>";
}
}
與其在循環中進行查詢以獲取相關數據,不如在頂部使用一個查詢來返回數據。
SELECT
a.`EAM_ID`,
a.`LOCATION_BLDG`,
a.`LOCATION_ROOM`,
b.`ACTIVE_STATUS`,
b.`ACTIVE_TIME`
FROM `LOCATION` a
LEFT JOIN `ACTIVE` b
ON a.`EAM_ID` = b.`EAM_ID`
LEFT JOIN `EAM` c
ON a.`EAM_ID` = c.`EAM_ID`
WHERE a.`LOCATION_BLDG` = 'LQ1'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.