1

問題がPHPにあるのか、MSSQLクエリにあるのかわからないため、タイトルについて申し訳ありません。私はそれがphpであるとかなり確信しています。

2つの異なるMSSQLテーブルにアクセスするPHPページを修復しています。システム全体を変更して新しい部門IDを作成し、新しい部門名を作成するまで、ページは正常に機能していました。

マイナーなことを除いて、これはほぼ完全に修正されました。[すべての部門を一覧表示]をクリックすると、すべての部門が一覧表示され、各リンクの下に正しい個人が表示されます。

問題は、その部門名に各個人のリンクがリストされていることです。たとえば、ビジネス部門に10人の人がいる場合、ビジネスへのリンクは10個あり、すべて同じ情報があります。

各部門にリンクが1つしかないようにしたいと思います。2つのテーブルは、ディレクトリ(関連する列はDisplaynameとDepartment)と部門(関連する列はnameとid)です。

各部門へのリンクが1つだけ印刷されるように、これを変更する必要がある場所を教えてもらえますか?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";
}

}
4

2 に答える 2

0

これらの2つのフィールドのみを使用している場合:

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");
于 2012-08-27T19:21:22.933 に答える
0

各反復の最後の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";
}
于 2012-08-27T19:26:24.503 に答える