gpt4 book ai didi

php - 使用 PHP 将 SQL Join 语句加入 HTML 表中的单个字段

转载 作者:太空宇宙 更新时间:2023-11-04 16:02:33 24 4
gpt4 key购买 nike

所以我正在创建一个日程安排系统,我正在尝试显示约会信息以及已预订职位的用户 ID。

我为 Students、Classes 和 ClassAssosication 创建了一个表,其中 ClassID 和 UserID 是来自其他表的 PK 和 FK。我创建了一个连接语句 =

SELECT classes.ClassName, students.UserID
FROM classassociation
JOIN students
ON classassociation.UserID = Students.UserID
JOIN classes
ON classassociation.ClassID = classes.ClassID
WHERE classassociation.ClassID = 1;

它为那些为 ID = 1 的类(class)预订位置的人检索用户 ID 和类(class)名称。

我正在尝试创建一个 PHP/HTML 表,在其中的一个字段中,例如,星期一上午 9 点,我可以打印出连接语句,例如,Methodology, 1 ,2(用户 ID)。

Day     |        9AM       | 10AM
Monday | Methodology, 1,2 |
Tuesday | |

我需要为多个类(class)完成此操作,但现在尝试尝试一个。我不确定如何执行此操作,因此将不胜感激。谢谢。

最佳答案

您编写的查询将为每个 ClassName/UserId 对返回一行 - 如果方法类中有两个人,那么您的查询结果中将有两行。

您可以选择在 php 中将它们组合成一个循环,或者您可以更改查询以将它们组合在一起。如果您认为它是“我想对给定类名的所有 UserId 进行分组”,它建议如何在您的 SQL 中使用 GROUP BY 子句:

SELECT classes.ClassName, students.UserID
FROM classassociation
JOIN students
ON classassociation.UserID = Students.UserID
JOIN classes
ON classassociation.ClassID = classes.ClassID
WHERE classassociation.ClassID = 1
GROUP BY ClassName;

现在每个ClassName 都有一行,但是您仍然需要告诉MYSQL 如何处理每一行的多个UserId。在您的情况下,您希望将 UserIds 连接在一起以逗号分隔的列表。令人高兴的是,the manual 中有一个特殊部分仅适用于您使用 GROUP BY 的功能。在这种情况下,GROUP_CONCAT 给出了期望的结果:

SELECT classes.ClassName, GROUP_CONCAT(students.UserID SEPARATOR ',') AS UersIds
FROM classassociation
JOIN students
ON classassociation.UserID = Students.UserID
JOIN classes
ON classassociation.ClassID = classes.ClassID
WHERE classassociation.ClassID = 1
GROUP BY ClassName;

现在您将得到一个结果集,每个 ClassName 一行,两列:

ClassName   | UserIds
---------------------
Methodology | 1,2

然后您可以编写一个简单的 php 循环来获取查询中的每一行并在您的 html 中生成一个表行。

如果您查看 GROUP_CONCAT 的手册,您会发现您还可以设置 userId 的分组顺序,这可能很有用。

一旦您有了查询结果,php 循环就非常简单;您只需要创建一个表,然后为每个结果添加一行:

/*assume your mysql query has returned an array of objects named $result */

// in your html document, create your table with its header
print '<table><thead><tr><th>Class Name</th><th>UserIds</th></tr></thead>';
print '<tbody>';
// now loop through your query results and put stuff into the table
// of course you can monkey around with the table format and what goes in each cell
foreach($result as $row) {
print '<tr><td>'.$row->ClassName.'</td><td>'.$row->UserIds.'</td></tr>';
}
print '</tbody></table>';

这是一个非常简单的例子,但希望能稍微揭开这个过程的神秘面纱。

您的特定情况看起来查询实际上是为了获取表格中一个单元格的内容;您可以执行按时间和星期几分组的更宏大的查询,也可以执行少量查询并将结果存储在嵌套数组中,嵌套数组模拟您希望表的外观。 html 输出在结构上是相同的,但是每个表格单元格都有一个 php 循环。

要让表格中的每个单元格显示单独查询的结果,请考虑类似以下伪代码的内容:

$days = array('Monday', 'Tuesday',...'Friday');
$times = array('9', '10'...);

$weekResults = array();
foreach($days as $day) {
$weekResults[$day] = array();
foreach($times as $time) {
$weekResults[$day][$time] = doQuery($day, $time);
}
}

// now you have nested arrays with a result set for each table cell.
// Rendering the table, you just use the same loops:

renderTableHeader(); // all the <table><thead> stuff
foreach($weekResults as $day) {
print '<tr>'
foreach($day as $time) {
print '<td>';
// output the data from your query like above
// if the formatting is complex, you can even put another table inside the <td>.
print '</td>';
}
print '</tr>';
}
renderTableFooter(); // close tbody and table tags

希望对您有所帮助!

关于php - 使用 PHP 将 SQL Join 语句加入 HTML 表中的单个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40873605/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com