0

我正在制作一个显示“活动”的应用程序。每个活动都有自己的按钮。当您单击该按钮时,您将该特定活动添加到您的“指南”中。这个想法是您只能添加一次特定活动,因此该活动的按钮在添加到指南时必须消失。我可以在我的 javascript 中使用简单$(this).hide()的,但是当我刷新页面时这显然不起作用。所以我想我应该检查一下该活动是否存在于指南中。

在数据库中,我有 3 个表,1: activity(with an ActivityID),2: user(with a UserID) 和 3: user_activity(with ActivityIDand UserID,一个链接表)。

所以检查必须检查user_activity表中是否ActivityID存在,并且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->执行(数组());  
$user_activityID = 数组();
而($row2 = $stm->fetch(PDO::FETCH_ASSOC))
{
    // 如果在 user_activity 表中,您尝试比较的列与活动中的名称相同 -- $row2['ActivityID']
    array_push($row2['ActivityID'], $user_activityID);
}

// 然后在遍历 user_activity 表时使用 in_array 进行比较
$sql = "SELECT * FROM 活动";
$stm = $db->prepare($sql);
$result = $stm->execute(array());
而($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 回答