我对标题感到抱歉,因为我不确定我的问题是在PHP还是MSSQL查询中。我很确定它是php。
我正在修复一个访问两个不同MSSQL表的PHP页面。页面运行良好,直到我们在系统范围内进行了更改,创建了新的部门ID,从而创建了一些新的部门名称。
除了一件小事,我现在几乎完全解决了这个问题。当您单击"列出所有部门"时,它会列出所有部门,并且每个链接下都有正确的个人。
问题是,它列出了该部门名称中每个人的链接——例如,如果业务部门有10个人,我们有10个到业务部门的链接,并且他们下面都有相同的信息。
我想让每个部门只有一个链接。这两个表是目录(涉及的列是Displayname和Department)和部门(涉及的栏是name和id)
有人能告诉我在哪里需要更改吗?这样它只打印每个部门的一个链接?问题是我的SQL查询还是PHP?
这是代码
function listDepts() {
$query = "SELECT directory.Lastname, directory.Firstname, directory.email,
directory.phone, directory.Office, directory.Department, departments.id,
departments.name FROM directory FULL JOIN departments ON
directory.Department=departments.id ORDER BY name";
$result = mssql_query($query);
echo "<h3>Please select a department:</h3>'n";
echo "<ul>'n";
for ($i=0; $i<mssql_num_rows($result); ) {
$info = mssql_fetch_assoc($result);
echo "<li><a href='"dept.php?dept=$info[id]'">$info[name]</a></li>'n";
}
echo "</ul>'n'n";
}
其他查询
function displayResults($query) {
$result = mssql_query($query);
if (mssql_num_rows($result) > 0) {
for ($i=0; $i<mssql_num_rows($result); $i++) {
$info = mssql_fetch_assoc($result);
if ($info[dept_name] != $last_dept) {
if ($i > 0) {
echo "</table>'n'n";
}
echo "<h3><a href='"$info[dept_url]'">$info[dept_name]</a></h3>'n'n";
echo "<table id='"directory_table'">'n";
echo "<tr>'n";
echo "<th>Name</th>'n";
echo "<th>E-mail</th>'n";
echo "<th>Phone</th>'n";
echo "<th>Office</th>'n";
echo "<th>Title</th>'n";
echo "</tr>'n";
}
if (!$info[dept_name] && $i==0) {
echo "<table id='"directory_table'">'n";
echo "<tr>'n";
echo "<th>Name</th>'n";
echo "<th>E-mail</th>'n";
echo "<th>Phone</th>'n";
echo "<th>Office</th>'n";
echo "<th>Title</th>'n";
echo "</tr>'n";
}
if ($i % 2 == 0) {
echo "<tr class='"even'">'n";
} else {
echo "<tr class='"odd'">'n";
}
echo "<td>";
echo ($info[Firstname]) ? "$info[Firstname]" . " " . "$info[Lastname]" : " ";
echo "</td>'n";
echo "<td>";
echo ($info[email]) ? "<a href='"mailto:$info[email]'">$info[email]</a>" : " ";
echo "</td>'n";
echo "<td>";
echo ($info[phone]) ? "$info[phone]" : " ";
echo "</td>'n";
echo "<td>";
echo ($info[office]) ? "$info[office]" : " ";
echo "</td>'n";
echo "<td>";
echo ($info[title]) ? "$info[title]" : " ";
echo "</td>'n";
$last_dept = $info[dept_name];
}
echo "</table>'n'n";
} else {
echo "<p>No results found.</p>'n'n";
}
}
如果您只使用这两个字段:
echo "<li><a href='"dept.php?dept=$info[id]'">$info[name]</a></li>'n";
为什么不直接进行选择查询:
SELECT DISTINCT
name
FROM
departments
ORDER BY
name
您没有使用directory
表中的任何内容,因此不需要从中获取任何内容。
如果你有多个部门,请尝试:
echo "<li><a href='"dept.php?dept=$info[name]'">$info[name]</a></li>'n";
然后更新您的部门代码以搜索该部门中具有该名称的员工。
部门代码:
$theSQL = "SELECT * FROM directory WHERE department IN (SELECT id FROM departments WHERE name='$department') ORDER BY Lastname");
在每次迭代结束时的for循环中,需要评估$i。它应该像
for ($i=0; $i<mssql_num_rows($result); $i++)
另一种(通常)循环方式是
$query = mssql_query('your_query');
while ($row = mssql_fetch_assoc($query)){
echo "<li><a href='"dept.php?dept=$row['id']'">$row['name']</a></li>'n";
}