簡體   English   中英

將mysql列中的數據顯示為PHP中的行

[英]Display data from mysql columns as rows in PHP

我試圖創建一個網站來顯示預訂系統的表格。 我在mysql數據庫中有一個表,其中包含如下數據:

在此處輸入圖片說明

第二列是post_id。 預訂詳細信息帶有相同的post_id。

我想創建一個html表,該表在一行中包含相同的預訂詳細信息,如下所示: 在此處輸入圖片說明

<html>
<head>
  <title>Booking</title>
  <style>
    table {
      border-collapse: collapse;
      width: 100%;
      color: #588c7e;
      font-family: monospace;
      font-size: 25px;
      text-align: left;
    } 
    th {
      background-color: #588c7e;
      color: white;
    }
    tr:nth-child(even) {background-color: #f2f2f2}
  </style>
</head>
<body>
  <table>
    <tr>
      <th>Field14</th> 
      <th>Field15</th> 
      <th>Field16</th>
    </tr>
    <?php
      $conn = mysqli_connect("localhost", "admin", "", "test");
      // Check connection
      if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
      } 
      $sql = "SELECT _field_14, _field_15, _field_16 FROM booking";
      $result = $conn->query($sql);

    ?>
  </table>
</body>
</html>

不要被透視查詢技術嚇到。 就像GROUPING一樣簡單,然后在簡單的case語句上調用MAX()

查詢:

SELECT 
    `post_id`,
    MAX(CASE WHEN `metar_key` = '_field_14' THEN `meta_value` ELSE NULL END) AS `field 14`,
    MAX(CASE WHEN `metar_key` = '_field_15' THEN `meta_value` ELSE NULL END) AS `field 15`,
    MAX(CASE WHEN `metar_key` = '_field_16' THEN `meta_value` ELSE NULL END) AS `field 16`
FROM `booking`
GROUP BY `post_id`
HAVING field14 IS NOT NULL AND field15 IS NOT NULL AND field16 IS NOT NULL
ORDER BY `post_id`;

*編輯: HAVING子句省略了完全由NULL值組成的生成的行-根據OP的要求。 然后,只需像平常一樣處理結果集行即可。

結果集:

post_id |   field 14  | field 15  |  field 16
--------|-------------|-----------|-----------
  490   |     IND     |   LHSM    | 2018-07-07
  491   |     ERK     |   LHKE    | 2018-07-08

這是一個代碼片段,其中包含錯誤檢查點,以向您展示如何處理結果集:

echo '<body>';
if (!$conn = new mysqli('localhost', 'admin', '', 'test')) {
    echo 'Connection Error'; // $conn->connect_error;  // never show the exact error message to the public
} else {
    $pivot = "SELECT 
                `post_id`,
                MAX(CASE WHEN `metar_key` = '_field_14' THEN `meta_value` ELSE NULL END) AS `field14`,
                MAX(CASE WHEN `metar_key` = '_field_15' THEN `meta_value` ELSE NULL END) AS `field15`,
                MAX(CASE WHEN `metar_key` = '_field_16' THEN `meta_value` ELSE NULL END) AS `field16`
            FROM `booking`
            GROUP BY `post_id`
            ORDER BY `post_id`";
    if (!$result = $conn->query($pivot)) {
        echo 'Syntax Error'; // $conn->error;  // never show the exact error message to the public
    } else {
        if (!$result->num_rows) {
            echo 'No Rows Returned From Pivot Query';
        } else {
            echo '<table>';
                echo '<tr><th>Field14</th><th>Field15</th><th>Field16</th></tr>';
                while ($row = $result->fetch_assoc()) {
                    echo "<tr><td>{$row['field14']}</td><td>{$row['field15']}</td><td>{$row['field16']}</td></tr>";
                }
            echo '</table>';
        }
        // $result->free();  // just a consideration
    }
    // $conn->close();  // just a consideration
}
echo '</body>';

嘗試這個...

<html>
<head>
  <title>Booking</title>
  <style>
    table {
      border-collapse: collapse;
      width: 100%;
      color: #588c7e;
      font-family: monospace;
      font-size: 25px;
      text-align: left;
    } 
    th {
      background-color: #588c7e;
      color: white;
    }
    tr:nth-child(even) {background-color: #f2f2f2}
  </style>
</head>
<body>
  <table>
    <tr>
      <th>Post_id</th>
      <th>Field14</th>
      <th>Field15</th> 
      <th>Field16</th>
    </tr>
    <?php
      $conn = mysqli_connect("10.0.1.1", "user", "pwd", "mydb");
      // Check connection
      if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error); 
      }

      $sql = "SELECT DISTINCT(POST_ID) from booking";
      $result = $conn->query($sql);

if ($result->num_rows > 0) {

      while ($row = $result->fetch_assoc()) {

        $idsql = "select metar_key, meta_value from booking where POST_ID=\"".$row["POST_ID"]."\"";
        $idresult = $conn->query($idsql);

    while ($id = $idresult->fetch_assoc()) {
      $var[$id["metar_key"]] = $id["meta_value"];
        }

        echo "<tr>\n";
        echo "<td>".$row["POST_ID"]."</td>\n";
        echo "<td>".$var["_field_14"]."</td>\n";
        echo "<td>".$var["_field_15"]."</td>\n";
        echo "<td>".$var["_field_16"]."</td>\n";
        echo "</tr>\n";
      }
}


/*
      $sql = "SELECT _field_14, _field_15, _field_16 FROM booking";
      $result = $conn->query($sql);
*/

    ?>
  </table>
</body>
</html>

我不知道我是否正確,但我認為您必須加入。 假設第一個表是表A,包含預訂詳細信息的表是表B。您需要的是:

SELECT post_id, field14, field15, field16 FROM B WHERE post_id IN (SELECT post_id FROM A);
    <html>
    <head>
      <title>Booking</title>
      <style>
        table {
          border-collapse: collapse;
          width: 100%;
          color: #588c7e;
          font-family: monospace;
          font-size: 25px;
          text-align: left;
        } 
        th {
          background-color: #588c7e;
          color: white;
        }
        tr:nth-child(even) {background-color: #f2f2f2}
      </style>
    </head>
    <body>
      <table>
        <tr>
          <th>Field14</th> 
          <th>Field15</th> 
          <th>Field16</th>
        </tr>
    <?php while($res = mysqli_fetch_array($result)) { 
    echo'<tr>';
    echo"<td>".$res['_field_14']."</td>";
    echo"<td>".$res['_field_15']."</td>";
    echo"<td>".$res['_field_16']."</td>";
}
   ?>
      </table>
    </body>
    </html>
    <?php
      $conn = mysqli_connect("localhost", "admin", "", "test");
      // Check connection
      if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
      } 
      $sql = "SELECT _field_14, _field_15, _field_16 FROM booking";
      $result = $conn->query($sql);

    ?>

此代碼。 希望能幫助到你

<?php
$row = array(
    array(
        'meta_id' => 1556,
        'post_id' => 490,
        'metar_key' => '_field_14',
        'meta_value' => 'IND'
    ),
    array(
        'meta_id' => 1557,
        'post_id' => 490,
        'metar_key' => '_field_15',
        'meta_value' => 'LHSM'
    ),
    array(
        'meta_id' => 1558,
        'post_id' => 490,
        'metar_key' => '_field_16',
        'meta_value' => '2018-07-07'
    ),
    array(
        'meta_id' => 1558,
        'post_id' => 490,
        'metar_key' => '_field_16',
        'meta_value' => '2018-07-07'
    ),
    array(
        'meta_id' => 1559,
        'post_id' => 491,
        'metar_key' => '_field_14',
        'meta_value' => 'ERK'
    ),
    array(
        'meta_id' => 1560,
        'post_id' => 491,
        'metar_key' => '_field_15',
        'meta_value' => 'LHKE'
    ),
    array(
        'meta_id' => 1561,
        'post_id' => 491,
        'metar_key' => '_field_16',
        'meta_value' => '2018-07-08'
    )
);

$table_tr = array();
$table_td = array('POST_ID');
foreach($row as $k => $v) {
    if(!in_array(strtoupper(substr($v['metar_key'], 1)), $table_td)) {
        $table_td[] = strtoupper(substr($v['metar_key'], 1));
    }
    if(!isset($table_tr[$v['post_id']]['POST_ID'])) {
        $table_tr[$v['post_id']]['POST_ID'] = $v['post_id'];
    }
    $table_tr[$v['post_id']][strtoupper(substr($v['metar_key'], 1))] = $v['meta_value'];
}
?>

<!DOCTYPE HTML>
<html>
    <head>
        <style>
            table,table tr th, table tr td { border:1px solid #000; }
            table { width: 200px; min-height: 25px; line-height: 25px; text-align: center; border-collapse: collapse; }   
        </style>
    </head>
    <body>
        <table>
            <tr>
                <?php
                foreach($table_td as $k => $v) {
                    echo '<th>'.$v.'</th>';
                }
                ?>
            </tr>
            <?php
            foreach($table_tr as $tr) {
                echo '<tr>';
                foreach($table_td as $k => $v) {
                    echo '<td>'.(isset($tr[$v]) ? $tr[$v] : '-').'</td>';
                }
                echo '</tr>';
            }
            ?>
        </table>
    </body>
</html>

這樣的結果。 在此處輸入圖片說明

$ row是您的mysql數據庫數據信息,您也可以通過代碼獲取它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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