我正在构建这个CRM,在编写查询以显示表数据客户端时,我遇到了一些奇怪的情况。我很难理解如何解决它...我在遇到这个问题之前确实删除了另一个表中的外键因为我想修改主行,现在我想我付出的代价我不知道该怎么做做...客户端如何数据显示真的不匹配数据库中的什么...无论如何我已经准备好被活着吃掉...我是NOOB我正在学习艰难的方式我也写PHP就像我是一个菜鸟所以我的代码确实看起来很无聊但它对我有用,这就是我理解它的方式。所以如果你有任何提示如何解决这个问题那就太棒了......
问题如下:ID行客户端不返回数据库中的ID,并且发送消息的名称与数据库中的名称不匹配。我怀疑它与我删除外键的id有关...
客户端
mailmessages.php
<!--
================================================================
Sent Messages
================================================================
-->
<?php
$perpage=5;
if(isset($_GET['page'])){
$page=$_GET['page'];
}
else{
$page=1;
}
$offset=($page-1)*$perpage;
$sqlsent="SELECT * FROM sentmessages INNER JOIN employees ON sentmessages.toEmployee_id=employees.employee_id WHERE username = '$user_check' LIMIT ".$offset.",".$perpage."";
$resultsent=mysqli_query($db,$sqlsent);
?>
<table id="table" class="sortable rwd-table table table-striped table-hover tablesorter " >
<thead style="cursor:pointer;">
<th>ID</th>
<th>Date Sent</th>
<th>To</th>
<th>Subject</th>
<th style='visibility: hidden;'>Message</th>
</thead>
<tbody>
<?php while ($sent = mysqli_fetch_assoc($resultsent)) {?>
<tr>
<td data-th="ID"><?=$sent['id'];?></td>
<td data-th="Date Sent"><?=$sent['time'];?></td>
<?php $toEmployee_idfnln ="SELECT first_name, last_name FROM employees INNER JOIN sentmessages ON employees.employee_id=sentmessages.toEmployee_id WHERE username=employees.username";$resulfnln=mysqli_query($db,$toEmployee_idfnln);$displaynames = $resulfnln->fetch_assoc();?>
<td data-th="To"><?=$displaynames['first_name'];?> <?=$displaynames['last_name'];?></td>
<td data-th="Subject"><?=$sent['subject'];?></td>
<td data-th="Message"><i class="fa fa-eye optionbox" aria-hidden="true"></i> <i class="fa fa-trash optionbox" aria-hidden="true"></i></td>
</tr>
<?php };?>
</tbody>
<tfoot></tfoot>
</table>
<div class='col-md-6 pull-left'>
<p>Total :
<?php $sqlsentmsg="SELECT * FROM sentmessages INNER JOIN employees ON sentmessages.toEmployee_id=employees.employee_id WHERE username = '$user_check'"; $resultsentmsg=mysqli_query($db,$sqlsentmsg); $rowcountmsg=mysqli_num_rows($resultsentmsg);echo $rowcountmsg;?>
Sent Messages</p>
</div>
答案 0 :(得分:0)
好的,所以我让我的代码工作了。原来没有什么本质上是错的,但查询。外键不是问题。我通过重新上载原始模式测试了这个并遇到了相同的重复ID问题。根据文档,外键允许重复。我注意到在员工表中生成了一个新的id,用于解释重复项。根据数据库的设计方式,它是正常的行为。外键约束id(即user.id = employees.id)接管正常的行ID,该行应显示如下1-2-3-4-5。这是我需要修复用户表的东西。
现在,对于未正确显示的名称,它与查询有关,而不了解要显示的对象。我必须做魔术才能理解如下:
我必须写:
$toEmployeeidQ = mysqli_query($db,"SELECT * FROM sentmessages INNER JOIN employees ON sentmessages.fromEmployee_id=employees.employee_id WHERE username = '$user_check'");
$rowemployeeid = mysqli_fetch_array($toEmployeeidQ,MYSQLI_ASSOC);
$session_toEmployeeid = $rowemployeeid['toEmployee_id'];
然后在查询中传递变量以获取名称:
<td data-th="To">
<?php $toEmployee_idfnln = "SELECT first_name, last_name FROM `employees` INNER JOIN sentmessages ON employees.employee_id=sentmessages.toEmployee_id WHERE employees.employee_id='$session_toEmployeeid'";$resulfnln=mysqli_query($db,$toEmployee_idfnln);$displaynames = $resulfnln->fetch_assoc();?>
<?php echo $displaynames['first_name'];?> <?php echo $displaynames['last_name'];?>
</td>