簡體   English   中英

MSSQL和PHP回顯重復行以獲取相同信息

[英]MSSQL and PHP echos repeating rows for same information

我對標題感到抱歉,因為我不確定我的問題出在PHP還是MSSQL查詢中。 我很確定它是php。

我正在修復訪問兩個不同MSSQL表的PHP頁面。 該頁面運行良好,直到我們在系統范圍內進行了更改,該更改創建了新的部門ID,從而創建了一些新的部門名稱。

除了一件小事,我現在幾乎已經全部解決了。 當您單擊列出所有部門時,它將列出所有部門,並且每個鏈接下都有正確的個人。

問題是它在該部門名稱中列出了每個人的鏈接,例如,如果業務部門中有10個人,則我們有10個業務鏈接,並且所有鏈接都具有相同的信息。

我想做到這一點,因此每個部門只有1個鏈接。 這兩個表是目錄(涉及的列是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]" : "&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";
}

}

在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";
}

如果僅使用以下兩個字段:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM