0

「活動」を表示するアプリを作っています。各アクティビティには独自のボタンがあります。そのボタンをクリックすると、その特定のアクティビティが「ガイド」に追加されます。アイデアは、1 つの特定のアクティビティを 1 回だけ追加できるということです。したがって、そのアクティビティのボタンは、ガイドに追加されたときに非表示にする必要があります。javascriptでシンプルを使用できますが$(this).hide()、ページを更新すると明らかに機能しません。したがって、ガイドにアクティビティが存在するかどうかを確認する必要があると思います。

データベースには、1: activity( 付きActivityID)、2: user( 付きUserID)、3: user_activity(ActivityIDおよびUserID、リンクテーブル付き) の 3 つのテーブルがあります。

したがって、チェックActivityIDでは、user_activity テーブルに が存在するかどうか、および user_activity テーブルにUserIDある に属する がActivityID現在のユーザーの ID と同じであるかどうかをチェックする必要があります。

現時点では、現在のユーザーの UserID を確認する方法を知っています。

//userid
$sql = "SELECT * FROM user WHERE Username = '".$_SESSION['Username']."' ";
$stm = $db->prepare($sql);
$result = $stm->execute(array());
while($row = $stm->fetch(PDO::FETCH_ASSOC)) {
$userid = $row['UserID'];
}

しかし、既に存在するかどうかを確認するActivityID方法と、if else ステートメントを作成する方法がわかりません。

このスクリプトを使用してアクティビティを表示した瞬間(ボタンを含む)

$sql = "SELECT * FROM activity";
$stm = $db->prepare($sql);
$result = $stm->execute(array());   

while($row = $stm->fetch(PDO::FETCH_ASSOC))
{
    echo '<div id="activity'.$row['ActivityID'].'">';
    echo '<img src="data:image/jpeg;base64,' . base64_encode( $row['ActivityIMG'] ) . '" >', '<br>';
    $instantguide = $row['ActivityID'];
    echo '<input type="button" class="addActivity" onclick="MakeRequest(' . $instantguide . ')" value="Activiteit toevoegen" data-activity="' . $row['ActivityID'] . '">';
    echo '</div>';
}
4

2 に答える 2

1

既に実行されているアクティビティを確認するには、LEFT JOIN が必要です

SELECT a.*, ua.ActivityID as added 
FROM activities a LEFT JOIN user_activity ua 
    ON a.ActivityID=ua.ActivityID AND UserID=:userid

そのため、結果セットに追加のaddedフィールドがあり、既に選択されている場合は id で埋められ、そうでない場合は空になります

于 2013-01-22T09:25:26.520 に答える
-1
// 最初に、検索するテーブルからすべての activityID を取得し、それらを配列に入れる必要があります
$sql2 = "SELECT * FROM user_activity";
$stm2 = $db->prepare($sql2);
$result2 = $stm2->execute(array());  
$user_activityID = 配列();
while($row2 = $stm->fetch(PDO::FETCH_ASSOC))
{
    // テーブル user_activity で、比較しようとしている列がアクティビティと同じ名前の場合 -- $row2['ActivityID']
    array_push($row2['ActivityID'], $user_activityID);
}

// 次に、in_array を使用して、user_activity テーブルを調べながら比較します
$sql = "SELECT * FROM アクティビティ";
$stm = $db->prepare($sql);
$result = $stm->execute(array());
while($row = $stm->fetch(PDO::FETCH_ASSOC))
{
    if (in_array($row['ActivityID'], $user_activityID))
    {
        // はい、アクティビティ テーブルの現在の $row['ActivityID'] は user_activity テーブルに存在します
        // これを配列に追加するかどうかを選択できます
        array_push($row['ActivityID'], $activityID);
    }

}

私が知らないいくつかのpdoのものを使用して、これを行うための他のより効率的な方法があると確信していますが、これは私がそれを行った方法です。

于 2013-01-22T09:20:27.577 に答える