簡體   English   中英

PHP-使用搜索結果對HTML表的多個SQL查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM