gpt4 book ai didi

php - MySQL:仅显示一个表中尚未从另一个表中显示的信息

转载 作者:行者123 更新时间:2023-11-28 23:18:20 24 4
gpt4 key购买 nike

我的目标是显示所有用户的姓名及其在特定匹配项中的可用性。下面的代码就是这样做的。可能不是最简单的方法,但我是新手,现在可以使用。

//Display match dates and times(showing all matches)
$stmt = $conn->prepare('SELECT * FROM matches
WHERE tid=:tid /*AND datetime BETWEEN (NOW() + INTERVAL 24 HOUR) AND (NOW() + INTERVAL 28 DAY)*/
ORDER BY datetime');
$stmt->bindParam(':tid', $tid, PDO::PARAM_INT);
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
echo "
<h2>".date("F j",strtotime($row["datetime"])). " @ ".date("g:i A",strtotime($row["datetime"]))."<br></h2>
<h3>"$row[location] Match <br> vs $row[opponent]</h3>";
echo "<table>
<tr>
<th>Player</th>
<th>Availability</th>
</tr>
</table>";


//Get available(Yes) users first and last names to display
$stmtY = $conn->prepare("SELECT user.first, user.last
FROM user
INNER JOIN match_part ON user.uid=match_part.uid
WHERE mid=:mid AND availability = 'Yes'");
$stmtY->bindParam(':mid', $row['mid'], PDO::PARAM_INT);
$stmtY->execute();
while ($rowY = $stmtY->fetch(PDO::FETCH_ASSOC))
{
echo "<table class='match-avail'>
<tr>
<td>$rowY[first] $rowY[last]</td>
<td><span style='color: #70db62'>&#10004;</span></td>
</tr>
</table>";
}

//Get unavailable(No) users first and last names to display
$stmtN = $conn->prepare("SELECT user.first, user.last
FROM user
INNER JOIN match_part ON user.uid=match_part.uid
WHERE mid=:mid AND availability = 'No'");
$stmtN->bindParam(':mid', $row['mid'], PDO::PARAM_INT);
$stmtN->execute();
while ($rowN = $stmtN->fetch(PDO::FETCH_ASSOC))
{
echo "<table class='match-avail'>
<tr>
<td class='Avail_No'>$rowN[first] $rowN[last]</td>
<td><span style='color: #b20000'>&#10008;</span></td>
</tr>
</table>";
}

上面给出了我想要的确切信息。

我卡住的地方是...

我有 team_members 表(tmid、uid、tid),其中包含给定团队中所有玩家的列表

一个 match_part 表(mpid、mid、uid、availability),其中包含已输入特定比赛可用性的球员的可用性。

我现在想显示尚未提供空闲时间的人。因此,我需要显示 match_part 表中不存在的 team_members 名称。所以我只需要显示 team_members 表中而不是 match_part 表中的球员姓名。

所以有些事情……

$stmtU = $conn->prepare("SELECT user.first, user.last
FROM user
INNER JOIN team_members ON user.uid=team_members.uid
INNER JOIN match_part ON user.uid=match_part.uid
WHERE ***team_member.uid is not in match_part.uid***");
$stmtU->bindParam(':tid', $tid, PDO::PARAM_INT);
$stmtN->bindParam(':mid', $row['mid'], PDO::PARAM_INT);
$stmtU->execute();
while($rowU = $stmtU->fetch(PDO::FETCH_ASSOC))
{
echo "<table class='match-avail'>
<tr>
<td>$rowU[first] $rowU[last]</td>
<td>?</td>
</tr>
</table>";
}

对于冗长的帖子感到抱歉,但我认为这些信息可能有助于理解这里的目标。感谢所有有任何想法/解决方案的人。非常感谢您的帮助!

最佳答案

如果我理解正确,您需要不在匹配部分的 team_members.uid为此,您可以使用 not in with subselect

  $stmtU = $conn->prepare("SELECT user.first, user.last
FROM user
INNER JOIN team_members ON user.uid=team_members.uid
where team_members.uid not in ( select uid from match_part)");

关于php - MySQL:仅显示一个表中尚未从另一个表中显示的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42864038/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com