我正在尝试创建一个网站以显示预订系统的表格。
我在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>
答案 0 :(得分:0)
不要被透视查询技术吓到。就像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`;
* edit: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>';
答案 1 :(得分:-1)
尝试一下...
<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>
答案 2 :(得分:-2)
我不知道我是否正确,但我认为您必须加入。假设第一个表是表A,包含预订详细信息的表是表B。您需要的是:
SELECT post_id, field14, field15, field16 FROM B WHERE post_id IN (SELECT post_id FROM A);
答案 3 :(得分:-2)
<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);
?>
此代码。希望对您有帮助
答案 4 :(得分:-2)
<?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>
这样的结果。 enter image description here
$ row是您的mysql数据库数据信息,您也可以通过代码获取它。