我有一个可排序的引导表(我对此相当自豪),它可以填充我文章db表中的表。
目前,我的文章表有5个表示标记的额外列,每个列都是单独填充的。
foreach完全按照要求工作(下面是用于排序的JS,但排除在这里)。
<div class="MTable">
<?php
include 'conn.php';
$result = $conn->query("SELECT * FROM table_a WHERE Column_1 ='Value' OR Column_2 ='Value'");
$table_a = $result->fetch_all(MYSQLI_ASSOC);
?>
<table id="table_1" class="table display table-sortable table-hover table-dark">
<thead>
<tr>
<th onclick="sortTable(0)">Column 1</th>
<th onclick="sortTable(1)">Column 2</th>
<th onclick="sortTable(2)">Column 3</th>
<th onclick="sortTable(3)">Column 4</th>
<th onclick="sortTable(4)">Column 5</th>
<th onclick="sortTable(5)">Column 6</th>
<th onclick="sortTable(6)">Column 7</th>
</tr>
</thead>
<tbody>
<?php foreach($table_a as $return) : ?>
<tr>
<td><?= $return['Column_1']; ?></td>
<td><?= $return['Column_2']; ?></td>
<td><?= $return['Tag_1']; ?></td>
<td><?= $return['Tag_2']; ?></td>
<td><?= $return['Tag_3']; ?></td>
<td><?= $return['Tag_4']; ?></td>
<td><?= $return['Tag_5']; ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>我已经开始构建一个标记系统,并计划删除这些额外的5列的文章表。
做了一些研究,并回顾了以前关于堆栈溢出的问题,并建立了一个三表系统("toxi“解决方案)。
我的表格布局如下所示,斜体代表外键;
目标:
我希望将第3-7列合并为一个列,并返回由;分隔的所有tag_names。就像这样..。
我可以使用内部连接来组合我的三个表(如下所示),但我不知道如何处理多个查询并管理foreach。有点超出了我的深度。
SELECT tag_name
FROM table_a
INNER JOIN table_c
ON table_c.article_id = table_a.article_id
INNER JOIN table_b
ON table_c.tag_id = table_b.tag_id
WHERE table_c.article_id = 'SelectedArticleName'发布于 2022-01-18 20:46:59
这与塞纳特函数的MySQL (查看您的MySQL版本和相关文档)是可能的。它使您能够在一个请求中获取所有数据。应该是这样的:
SELECT article_id, article_name,
GROUP_CONCAT(DISTINCT tag_name,
ORDER BY tag_name DESC SEPARATOR ';') AS tags
FROM table_a
INNER JOIN table_c
ON table_c.article_id = table_a.article_id
INNER JOIN table_b
ON table_c.tag_id = table_b.tag_id
GROUP BY table_a.article_id, table_a.article_name注意,GROUP_CONCAT结果的长度是有限的。
结果被截断到group_concat_max_len系统变量给出的最大长度,该变量的默认值为1024。虽然返回值的有效最大长度受max_allowed_packet值的约束,但可以将其设置为更高的值。
https://stackoverflow.com/questions/70759111
复制相似问题