MSSQL和PHP echos重复行以获取相同的信息

时间:2012-08-27 19:18:11

标签: php sql-server

我对标题感到抱歉,因为我不确定我的问题是在PHP还是MSSQL查询中。我很确定它是php。

我正在修复访问两个不同MSSQL表的PHP页面。页面工作正常,直到我们进行了系统范围的更改,创建了新的部门ID,因此创建了一些新的部门名称。

我现在几乎完全修复了这个问题,除了一个小问题。当您单击列出所有部门时,它会列出所有部门,并且每个链接都包含正确的个人。

问题是它列出了该部门名称中每个人的链接,例如,如果业务部门中有10个人,我们有10个指向Business的链接,并且所有人都有相同的信息。

我想这样做,因此每个部门只有一个链接。这两个表是目录(涉及的列是Displayname和Department)和部门(涉及的列是名称和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]" : "&nbsp;";
        echo "</td>\n";

        echo "<td>";
        echo ($info[email]) ? "<a href=\"mailto:$info[email]\">$info[email]</a>" : "&nbsp;";
        echo "</td>\n";

        echo "<td>";
        echo ($info[phone]) ? "$info[phone]" : "&nbsp;";
        echo "</td>\n";

        echo "<td>";
        echo ($info[office]) ? "$info[office]" : "&nbsp;";
        echo "</td>\n";

        echo "<td>";
        echo ($info[title]) ? "$info[title]" : "&nbsp;";
        echo "</td>\n";

        $last_dept = $info[dept_name];
    }

    echo "</table>\n\n";

} else {
    echo "<p>No results found.</p>\n\n";
}

}

2 个答案:

答案 0 :(得分:1)

在每次迭代结束时的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";
}

答案 1 :(得分:0)

如果您只使用这两个字段:

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");