我被问到输出文件应该只输出上传具有特定名称的文件的最后一个人的姓名和ID。混淆吧?即使我很困惑。那么让我举个例子
让我们说您在公司注册了3名员工。我们打电话给他们
皮卡丘在公司上传了3个文件,Raichu上传了2个文件,Pichu也上传了2个文件。还必须根据employeename(ASC)和文件名(DESC)订购文件。我已经订购了。这是我唯一的问题。在这种情况下,输出应如下所示:
*注意到员工姓名和员工ID是在上传的最后一个文件中?有谁知道怎么做?请求我们帮助我在这里T-T任务太难了我只是一个菜鸟
我想在这里使用2个表。表1为员工ID和员工姓名,表2为文件名等,所以我猜这也涉及2 while子句。我有这个想法,但我不知道如何将它们全部混合起来。
我编辑之前的代码就像sir vincent一样:
if ($_SESSION[$fgmembersite->GetLoginSessionVar()] == 'sa'
OR $_SESSION[$fgmembersite->GetLoginSessionVar()] == 'admin')
{
$sql= "select * from gmdc_employee
where employee_name like '%$search%'
AND employee_name like '$listname%'";
} else {
$sql = "select b.* from gmdc_user a, gmdc_employee b
where a.username = '".$_SESSION[$fgmembersite->GetLoginSessionVar()]."'
AND a.company_id = b.company_id
AND b.employee_name like '$listname%'
AND b.employee_name like '%$search%'";
}
$query = mysql_query("$sql ORDER BY employee_name,confirmation DESC
,file_id DESC,file_date DESC
LIMIT $offset,$limit") or die ( mysql_error () );
$result = mysql_query($sql) or die (mysql_error());
$total = mysql_num_rows($result);
if(!$result || mysql_num_rows($result) <= 0)
{
$fgmembersite->HandleError("No file found.");
return false;
}
while ($row = mysql_fetch_assoc($query))
{
$file_id = $row['file_id'];
$file_desc = $row['file_description'];
$file_date = $row['file_date'];
$file_name = $row['file_name'];
$file_accs = $row['folder_access'];
$file_employee = $row['employee_id'];
$file_confir = $row['confirmation'];
$file_ename = ucwords($row['employee_name']);
$info = pathinfo($file_name);
$file_ext = $info['extension'];
echo '<tr><td> </td></tr>
<tr class="subone"><td class="sub" width="100">'.$file_employee.'<br />
</td>';
if($_SESSION[$fgmembersite->GetLoginSessionVar()] == 'sa')
{
?>
<td class="sub" width="100">
<a href="" onclick = javascript:newPopup('addfile.php?emp=
<?php echo $file_employee ?>');><?php echo$file_ename?></a>
<br /> </td>
<?php
} else {
echo '<td class="sub" width="182">'.$file_ename.'<br /> </td>';
}
echo'<td class="sub" width="218">
<a href="'.$file_accs.$file_name.'" target="_blank"
style="text-decoration: underline;">'.$file_desc.'</a>
<br /> </td><td class="sub" width="100">
'.date('M d, Y',mktime(0,0,0,substr($file_date,5,2)
,substr($file_date,8,2),substr($file_date,0,4))).'
<br /> </td><td class="sub" width="100">'.$file_confir.'
<br /> </td>';
if($_SESSION[$fgmembersite->GetLoginSessionVar()] == 'sa')
{
if($file_confir == 'Pending' OR $file_confir == 'NotApproved')
{
if(isset($_GET['id']))
{
$fgmembersite->Delete_Db($_GET['id']);
}
echo '<td class="sub" width="100">
<a href="index.php?id='.$file_id.'">Delete</a>
<br /> </td>';
}
}
else if($_SESSION[$fgmembersite->GetLoginSessionVar()] == 'admin')
{
if($file_confir == 'Pending')
{
if(isset($_GET['yes']))
{
$fgmembersite->UpdateYesDB($_GET['yes']);
//echo "<script>location.reload();</script>";
}
else if(isset($_GET['no']))
{
$fgmembersite->UpdateNoDB($_GET['no']);
//echo "<script>location.reload();</script>";
}
if (!isset($_GET['offset'])) {
$prevoffset = 0;
} else {
$prevoffset = $_GET['offset'];
echo'<td class="sub" width="100">
<a href="index.php?offset='.$prevoffset.'&searchfile='.$search.'
&namelist='.$listname.'&yes='.$file_id.'">Approve</a>
//there's a link here<br /><br />
<a href="index.php?offset='.$prevoffset.'&searchfile='.$search.'
&namelist='.$listname.'&no='.$file_id.'">NotApprove</a>
//there's a link here
</td> ';
}
}
}?>
只是忽略每个if($_SESSION[$fgmembersite->GetLoginSessionVar()] == 'admin')
等等,这是针对不同的输出,因为我的文件可以由3个不同的用户登录。 SA(程序员),admin(上传文件的批准者)和用户(公司)。那里还有TD和TR,我不知道为什么它不会出现在这里。
输出看起来像这样:
employee_id + employee_name + file_name
3 | pichu | file6
3 | pichu | file1
1 | pikachu | file7
1 | pikachu | file4
1 | pikachi | file3
2 | raichu | file8
2 | raichu | file5
2 | raichu | file2
我希望我的输出是这样的:
***OUTPUT***
**employee_id employee_name file_name**
3 pichu file6
file1
1 pikachu file7
file4
file3
2 raichu file5
file2
例如,raichu上传了另一个文件,输出现在应该如下所示:
的输出 的
**employee_id employee_name file_name**
3 pichu file6
file1
1 pikachu file7
file4
file3
2 raichu file8
file5
file2
答案 0 :(得分:1)
使用Vincent表结构可能会解决您的问题。要获得所需的结果,可以使用连接的单个查询来表示两个表。所以不需要使用两个查询。
SELECT e.employee_id as employee_id, //Display column for employee_id
e.employee_name as employee_name,
f.file_name as file_name
FROM employee e // The e is an alias for table
INNER JOIN file f // The inner join will return all the rows which have same employee_id on both table
ON e.employee_id = f.employee_id
ORDER BY e.employee_name, f.file_name DESC; // Order of the result default is ASC
<强>更新强>
我假设你有两张桌子,结构与文森特相同。现在,此查询将获取两个表的数据。此处的加入部分是,当employee_id
上的employee table
employee_id
上的file table
具有相同e.employee_id
时,这将返回一行。有关详细信息,请参阅mysql join。然后,订单employee
是ascending
表上的employee_id,因为没有指定订单,它将使用默认值employee_id + employee_name + file_name
3 | pichu | file6
3 | pichu | file1
1 | pikachu | file7
1 | pikachu | file4
1 | pikachi | file3
2 | raichu | file8
2 | raichu | file5
2 | raichu | file2
。
然后输出上述查询可能是以下代码。
SELECT column_name
您会注意到employee_id和employee_name会重复出现。这是因为查询包含$query = $see_the_query_above;
$result = mysql_query($query) or die(mysql_error($db));
$emp_id = ""; //This will be use to remove employee_id if its already echoed.
$emp_name = ""; //This will be use to remove employee_name if its already echoed.
echo '<table>';
echo '<tr><th>employee_id</th><th>employee_name</th><th>file_name</th></tr>';
while ($row = mysql_fetch_assoc($result)) {
//Check $emp_id and $emp_name if same with the current, if same just print nothing or space else replace it with new.
$emp_id = $emp_id == $row['employee_id'] ? "" : $row['employee_id']
$emp_name = $emp_name == $row['employee_name'] ? "" : $row['employee_name'];
echo '<tr>';
echo '<td>'.$emp_id.'<td>';
echo '<td>'.$emp_name.'</td>';
echo '<td>'.$row['file_name'].'</td>';
echo '</tr>';
}
echo '</table>';
中指定的行中的所有列值。您可以过滤php中的重复值,特别是如果您将它首先存储在对象中而不是直接打印它。
<强> PHP 强>
{{1}}
答案 1 :(得分:0)
听起来并不那么难。
表employee
:
此表可能有两个字段(以最简单的方式):employee_id,employee_name
表file
:
此表可能有三个字段:file_id,employee_id(这是外键),file_name
上传文件时,将其名称更改为以下格式:“file”+ file_id
因此,我们有:表employee
:
employee_id | employee_name ----------------------------- 1 | pikachu 2 | raichu 3 | pichu
表file
:
file_id | employee_id | file_name ------------------------------------- 1 | 3 | file1 2 | 2 | file2 3 | 1 | file3 4 | 1 | file4 5 | 2 | file5 6 | 3 | file6 7 | 1 | file7 8 | 2 | file8
那么让它们全部变得非常容易,你怎么看?
答案 2 :(得分:0)
假设您使用MySQL并假设我们使用引用$ db:
建立数据库连接$query = 'SELECT employee_id, employee_name FROM `employee` ORDER BY employee_name ASC';
$result = mysql_query($query) or die(mysql_error($db));
echo '<table>';
echo '<tr><th>employee_id</th><th>employee_name</th><th>file_name</th></tr>';
while ($row = mysql_fetch_assoc($result)) {
echo '<tr>';
echo '<td>'.$row['employee_id'].'<td>';
echo '<td>'.$row['employee_name'].'</td>';
echo '<td>';
$query2 = 'SELECT file_name FROM `file` WHERE employee_id='.$row['employee_id'].' ORDER BY file_id DESC';
$result2 = mysql_query($query2) or die(mysql_error($db));
while ($row2 = mysql_fetch_assoc($result2)) {
echo $row2['file_name'].'<br />';
}
echo '</td>';
echo '</tr>';
}
echo '</table>';
这段代码可以使用。