我需要一些幫助 - 我有兩張桌子:events (eventID, event_name, event_description) - 用于存儲(chǔ)有關(guān)不同事件的信息events_applied (eventID, userID, date_applied) - 用于跟蹤哪些用戶應(yīng)用了哪些事件當(dāng)用戶登錄到應(yīng)用程序時(shí),他應(yīng)該只看到可供他申請(qǐng)的事件,或者更準(zhǔn)確地說,這將是他尚未申請(qǐng)的事件。應(yīng)隱藏應(yīng)用的事件。所有內(nèi)容都應(yīng)打印在帶有應(yīng)用程序鏈接的表格中。目前,我的代碼如下所示:$sql = "SELECT * FROM events";if($stmt = $mysqli->prepare($sql)) { $stmt->execute(); $stmt->store_result(); $num_of_rows = $stmt->num_rows; $stmt->bind_result($eventID, $event_name, $event_description); echo '<table> <thead> <tr> <th>Event #</th> <th>Event name</th> <th>Event description</th> <th>Apply</th> </tr> </thead> <tbody>'; while ($stmt->fetch()) { echo '<tr> <td>'.$eventID.'</td> <td>'.$event_name.'</td> <td>'.$event_description).'</td> <td><a href="event_apply.php?eventID='.$eventID.'&userID='.$userID.'">Apply</a></td> </tr>'; } }問題是這將打印出所有事件,但我需要?jiǎng)h除每個(gè)用戶的“已經(jīng)應(yīng)用到”事件,或者(更好) - 打印出應(yīng)用的事件而不是打印“應(yīng)用鏈接”,我會(huì)打印出“對(duì)不起,你已經(jīng)申請(qǐng)了這個(gè)活動(dòng)。我怎樣才能做到這一點(diǎn)?我在想,也許在 while 循環(huán)中我可以這樣做,$sql = "SELECT DISTINCT eventID FROM events_applied WHERE userID = ?";但看起來有點(diǎn)亂:/編輯/新信息 我已經(jīng)用“max_people”參數(shù)擴(kuò)展了“事件”表 - 所以我可以限制注冊(cè)每個(gè)事件的人數(shù)。我將如何修改代碼以不顯示已滿的事件?這是目前有效的答案:SELECT e.*FROM events eLEFT JOIN events_applied ea ON ea.eventID = eID.eventID AND ea.userID = :userIDWHERE ea.eventID IS NULL我嘗試添加另一個(gè)這樣的 WHERE: AND (SELECT COUNT (userID) FROM events_applied WHERE eventID = :eventID問題是我不知道如何將 eventID 作為變量獲取 - 我正在使用 while 循環(huán)打印出所有事件,但在此之前我需要這個(gè)變量,對(duì)嗎?
1 回答

炎炎設(shè)計(jì)
TA貢獻(xiàn)1808條經(jīng)驗(yàn) 獲得超4個(gè)贊
這看起來像是反模式的一個(gè)很好的用例LEFT JOIN:
SELECT e.*
FROM events e
LEFT JOIN events_applied ea
ON ea.eventID = euserID.eventID AND ea.userID = :userID
WHERE ea.eventID IS NULL
:userID當(dāng)前連接用戶的 id 在哪里。
此查詢選擇所有事件并執(zhí)行 aLEFT JOIN以連接到當(dāng)前用戶申請(qǐng)的事件。然后,該WHERE子句消除匹配的事件。結(jié)果,您確實(shí)獲得了當(dāng)前用戶尚未申請(qǐng)的所有事件。
- 1 回答
- 0 關(guān)注
- 157 瀏覽
添加回答
舉報(bào)
0/150
提交
取消