1

練習プロジェクト用の基本的な通知システムを作成しています。いくつかのテーブルがあり、そのうちの 2 つは次のようになります。

> Table 1: "Users"
> 
userid | username  | Firstname | Lastname  
1      | Daffy     |   Daffy   | Duck
2      | Flinstone |   Fred    | Flinstone 
3      | dduck     |   Donald  | Duck
> 
> Table 2: "Notifications"
> 
 Notification_id | from_user_id | to_user_id | SeenOrUnseen | type    
     1           |   1          |     2      |       1      |  fRequest               
>    2           |   1          |     2      |       0      |  comment               
>    3           |   1          |     2      |       1      |  comment               
>    4           |   3          |     1      |       1      |  fRequest               
>    5           |   2          |     3      |       1      |  fRequest               
>    6           |   2          |     3      |       0      |  comment               
>    7           |   3          |     2      |       0      |  comment

次に、これらの両方のテーブルからのデータが必要です。通常は、SQL クエリを送信する前に、user_id と from_user_id でテーブルを結合します。ただし、2 番目のテーブルには from_user_id の複数のインスタンスがあるため、結合は複数の値を返すように見えます。代わりに、データベースにクエリを実行し、while ループでデータを返し、その while ループ内で別のクエリをデータベースに送信して、別のテーブルの情報を取得しています。

include('../../db_login.php');
$con = mysqli_connect("$host", "$username", "$password", "$db_name");
$tbl_name = "Profile";
$tplname = "profile_template.php";
$tplname2 = "public_profile_template.php";
$myid = $_SESSION['identification'];
//CHECK CONNECTION
if(mysqli_connect_errno($con))  {
echo "failed to connect" . mysql_connect_error();
}else {
$result = mysqli_query($con, "SELECT * FROM Notifications WHERE to_user_id='$myid'");
$count = mysqli_num_rows($result);
if($count == 0){

    $style = "display:none;";
} else {

echo "<ul class='notifications'>";
    while($row = mysqli_fetch_array($result)){
    $from_user_id = $row['from_user_id'];
    $to_user_id = $row['to_user_id'];
    $seen = $row['seen'];
    $nature = $row['nature'];
        $result2 = mysqli_query($con, "SELECT * FROM users WHERE id='$from_user_id'");
        $count2 = mysqli_num_rows($result2);
        if($count2 != 0){
        while($row2 = mysqli_fetch_array($result2)){
        $fromFirstname = $row2['Firstname'];
        $fromLastname = $row2['Lastname'];

        }
    if($nature == 'fRequest'){
    echo "<li> You have received a friend request from" . $fromFirstname . " " . $fromLastname . "</li>";
    }
    }

    }   
    echo "</ul>";
}


mysqli_close($con);
}
                echo "<div id='NoNotification'></div>";
                echo "<div id='Notification' style='" . $style . "'></div>";
                ?>

これを行うより良い方法はありますか?

助けてくれてありがとう!

4

1 に答える 1

1

次のようなことができます。

SELECT n.*, u.*
FROM Notifications n 
JOIN users u ON n.from_user_id=u.id
WHERE n.to_user_id=$myid
ORDER BY n.id, u.id

必要なすべてのデータを取得します。通知データとユーザー データ。代わりに、取得するフィールドを定義することをお勧めします。これ*により、何を使用しているか、使用していないデータを送信していないかをよりよく把握できます。

整数(id)を文字列として使用している場合は、$myidそこに置くことができます。また、これは MySQL インジェクションの安全なクエリではないことに注意してください。詳しくは.

于 2013-10-18T16:20:24.737 に答える