php - 在 php 表中显示来自 Mysql 的外键

标签 php mysql

我的数据库中有以下表格:

CREATE TABLE subjects (
  subject_id int(11) NOT NULL AUTO_INCREMENT,
  subject_name text,
  PRIMARY KEY (subject_id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;

CREATE TABLE users (
  id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  username varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE users_subjects (
  users_subjects_id int(11) NOT NULL AUTO_INCREMENT,
  user_id_fk int(11),
  subject_id_fk int(11),
  FOREIGN KEY(user_id_fk) REFERENCES users(id),
  FOREIGN KEY(subject_id_fk) REFERENCES subjects(subject_id),
  PRIMARY KEY (users_subjects_id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;

在“users_subjects”表中,我试图关联“subjects”和“users”表。表格中的所有数据都是从我的 index.php 输入的。

我从我的 index.php 中引入 subject_name,每次我输入一个新的时,都会在添加用户的部分创建这样的复选框:

enter image description here

这样,当输入用户并选择所需的主题时,将创建“users_subjects”表。

例如,如果我输入 ID = 1 的用户“EXAMPLE”以及 ID 为 1 和 2 的 SAT 和 ICT 科目,“users_subjects”表将如下所示:

enter image description here

问题是我试图在 PHP 表中向用户显示他们相应的主题,但我不知道如何在“主题”列中显示以逗号分隔的主题。我想做类似下图的事情,但我不知道该怎么做。有人可以帮我吗?谢谢

enter image description here

这是我的 index.php:

<table class="users">
    <tr>
        <th colspan="2"><h2>Users registered</h2></th>
    </tr>
    <tr>
        <th> USER </th>
        <th> SUBJECT </th>
    </tr>

<?php
$result = $conn->query($sql); 
$sql = "SELECT * FROM users WHERE rol='profesor'";
$result = $conn->query($sql);

$sql2 = "SELECT * FROM users_subjects WHERE id=$id";
$result2 = $conn->query($sql2);

if ($result->num_rows==0){

    echo 'No professors >';
}else{
    while($row = $result->fetch_assoc()) {
        echo "<tr>
                  <td>".$row["username"]."</td>
                  <td>".$row["subject"]."</td>
                  </tr>";
    }
}

?>
</table>

最佳答案

将 $sql2 查询更改为:-

$sql2 = "SELECT s.subject_name,u.username FROM users_subjects us LEFT JOIN users ON us.user_id=u.id 
LEFT JOIN subjects ON s.subject_id = us.subject_id  WHERE users_subjects_id=$id";

And replace the while loop with the following :- 
while($row = $result->fetch_assoc()) {
        $subjects = implode(',',$row['subject_name']);
        echo "<tr>
                  <td>".$row["username"]."</td>
                  <td>".$subjects."</td>
                  </tr>";
 }

你可以看一下,但做这样的事情。

谢谢

关于php - 在 php 表中显示来自 Mysql 的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55994220/

相关文章:

php - 用 PHP 设计一个安全的自动登录 cookie 系统

php - 如何从需要在 PHP 页面上以 root 身份运行的 Python 脚本返回输出?

mysql - 聚集索引在SQL查询上的性能

mysql - SQL 中的外键

php - Laravel 5 选择唯一的列

php - 将多个复选框值插入 MySQL

php - Laravel - 集合表

mysql - 使用 Macports 安装 MySQL 5.6

php - 测试PHP/MySQLi连接性

javascript - 如何使用 AJAX、PHP 和 MySQL 发送个人消息?