我正在构建一个MYSQL生成的PHP应用程序。我有一张叫做学生的桌子和一张叫做笔记的桌子。笔记表将用于输入有关被通知学生的任何额外信息,以便顾问可以在他们下次向学生提出建议时返回并查看信息。我不知道该如何解决这个问题。
我希望顾问只看到他们建议的特定学生的笔记,而不是其他人。我正在使用内部联接来连接两个表以及SELECT语句。来自两个表的信息将以HTML格式发布到备注页面。如何插入数据以便正确查看?我在这里先向您的帮助表示感谢。
这是我的选择查询(不是整页)。此页面显示了笔记。
<?php
$query = "
SELECT
notes.Note_Title,
notes.Note_Desc,
notes.Note_Cont,
notes.Note_Date
from notes
INNER JOIN students
ON notes.id = students.id
Where students.id = 'id'";
try {
$stmt = $db->prepare($query);
$stmt->execute();
}
catch(PDOException $ex)
{
die("Opps that Query didn't work out: " . $ex->getMessage());
}
while($row = $stmt->fetch()){
echo'<div>';
echo'<tr>';
echo '<td><h5><a href="notes_view.php?id='.$row['id'].'">'.$row['Note_Title'].'</a></h5></td>';
echo '<td><p>Note created on '.date('JS M Y H:i:s', strtotime($row['Note_Date'])).'</p></td>';
echo '<p>'.$row['Note_Desc'].'</p>';
echo '<p><a href="notes_view.php?id='.$row['id'].'">Read Note</a></p>';
echo '<p><a href="delete.php?id='.$row['id'].'">Delete note</a></p>';
echo '<p><a href="edit_notes.php?id='.$row['id'].'">Edit</a></p>';
echo '<hr width="100%">';
echo'</div>';
}
$query = "INSERT INTO notes (
id,
Note_Title,
Note_Desc,
Note_Cont,
Note_Date
) VALUES (
:id,
:Note_Title,
:Note_Desc,
:Note_Cont,
:Note_Date
)
";
$query_go = array(
':id' => $id,
':Note_Title' => $Note_Title,
':Note_Desc' => $Note_Desc,
':Note_Cont' => $Note_Cont,
':Note_Date' => date('Y-m-d H:i:s')
);
try {
$stmt = $db->prepare($query);
$result = $stmt->execute($query_go);
}
catch(PDOException $ex)
{
die("Opps that query didn't work out: " . $ex->getMessage());
}
header('location: index.php?action=added');
exit;
}
}
?>
<form action='' method='POST'>
<input type='hidden' name='id' id='id' value='<?php if(isset($error)){echo $_POST['id'];}?>'>
<p><label>Note Title:</label><br />
<input type='text' name='Note_Title' value='<?php if(isset($error)){echo $_POST['Note_Title'];}?>'></p></td>
<p><label>Note description:</label><br />
<textarea name="Note_Desc" cols="40" rows="11"><?php if(isset($error)){echo $_POST['Note_Desc'];}?></textarea></p></td>
<p><label>Note content:</label><br />
<textarea name="Note_Cont" cols="70" rows="11"><?php if(isset($error)){echo $_POST['Note_Cont'];}?></textarea></p></td>
<p><input type="submit" name="submit" value="submit" ></p>
</form>
答案 0 :(得分:1)
根据您显示的代码,您的网页似乎会显示所选用户的注释。这代表"one to many"关系;一个用户可以有很多笔记,每个笔记只能与一个用户关联。
在这种情况下,我只会选择所需用户的注释,而不是使用JOIN
。为此,请在user_id
表格中添加notes
列(foreign key):
`id`
`user_id`,
`title`,
`description`,
`content`,
`date`
当您进入用户注释页面时,请选择该用户的所有注释:
SELECT * from `notes` WHERE `user_id`=:user_id;
编辑记事时,您并不真正需要user_id
(除非您允许将记事重新分配给其他用户)。您可以通过自己唯一的id
引用每个音符。像这样:
<form action='' method='POST'>
<input type='hidden' name='id' value='<?=$note['id']?>'>
....
</form>
顺便说一下,您可以使用JOIN在用户列表中显示每个用户的备注数量。像这样:
SELECT u.*,
COUNT(n.`id`) as `note_count`
FROM `users` u
LEFT JOIN `notes` n ON (n.`user_id`=u.`id`)
GROUP BY u.`id`;
答案 1 :(得分:0)
我写这篇文章只是为了增加showdev已经说过的内容。我在这里做了几个假设;您已经了解了数据库基础知识,特别是规范化以及如何使用PHP与MySQL交互。所以我不会写代码。只是试图解释逻辑。
您有两个表students
和notes
。两者之间的关系是one-to-many
关系。这仅仅意味着一个学生可以拥有与他/她相关的许多笔记。但另一方面,每个单个笔记将始终属于一个特定的学生。
因此,在notes
表格中,添加一个名为“student_id”的字段或属性。这个新字段应该是一个外键,它链接到(引用)students
表中学生的id。
现在,如果您想查看特定学生的所有笔记,您的查询将变得更简单。不需要加入。
SELECT * FROM notes WHERE student_id = :student_id
当然,当您插入新笔记时,您必须包含特定笔记所属学生的ID。
而不是使用PHP的日期函数将日期插入到notes表中,您可以允许MySQL自动为您执行此操作。更改notes
表中的Note_Date列。设为Note_Date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
。 MySQL会自动为您插入当前日期和时间。这将节省一些字节的网络开销。