在php表中显示Mysql中的外键

在php表中显示Mysql中的外键,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 PRI

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

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\u subjects”表中,我试图将“subjects”和“users”表联系起来。表中的所有数据都是从my index.php输入的

我从index.php中引入了subject_名称,每次输入一个新名称时,都会在添加用户的部分创建如下复选框:

这样,当输入用户并选择所需的主题时,将创建“users\u subjects”表

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

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

这是我的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>";
 }
$sql2=“从用户中选择s.subject\u name、u.username\u subjects我们左侧加入用户。用户\u id=u.id
左连接s.subject_id=us.subject_id上的主题,其中用户_subjects_id=$id”;
并将while回路更换为以下部件:-
而($row=$result->fetch_assoc()){
$subjects=内爆(“,”,$row['subject_name']);
回声“
“$row[“用户名”]”
“$科目。”
";
}
你可以看一看,但做一些像这样的事情


谢谢

您可能想知道MyISAM表不强制外键约束。您应该使用InnoDB。MyISAM正慢慢地被弃用。另外,请阅读我对“但我不知道如何在“主题”列中显示以逗号分隔的主题”的回答,听起来您正在寻找MySQL的函数,您需要使用JOINThank感谢您的回答。我尝试了使用
$sql2=“选择s.subject\u name,u.username FROM users\u subjects us LEFT JOIN users ON us.user\u id\u fk=u.id LEFT JOIN subjects ON s.subject\u id=u.subject\u fk WHERE users\u subjects\u id=$id”
$result2=$conn->query($sql2)
但是它给了我一个错误:
内爆
,带有:
警告:内爆():传递的参数无效