[英]Mysql Join two tables to check if a user has made a pick
嗨,我正在尝试加入两个MySQL表。 下表如下:
Table 1
Name: mlb_game_feed
Fields: game_feed_game_id, date, home_team, away_team
Table 2
Name: user_picks
Fields: pick_id, game_feed_game_id_fk, user_id_fk
这是我尝试用来连接两个表的sql:
$sql = "
SELECT game_feed_game_id
, home_team
, away_team
, COUNT(1) as cnt
FROM game_feed_mlb
JOIN user_picks
ON user_picks.game_feed_game_id_fk = game_feed_mlb.game_feed_game_id
Where game_feed_mlb.date = '" . $_SESSION['date']."'
AND user_picks.user_id_fk = 1";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
// output data of each row
while($row = mysqli_fetch_assoc($result)) {
$count = $row["cnt"];
$game_id = $row["game_feed_game_id"];
$home_team = $row['home_team'];
$away_team = $row['away_team'];
echo $game_id;
}
}
我的目的是检查用户是否从mlb_game_feed表中选择了获胜者( home_team或away_team ),如果有,我将在屏幕上将链接从make_pick更改为change_pick (带有if($count)
语句)。
但是,当前我什至没有得到任何数据,这意味着我的sql可能不正确。 任何帮助将是巨大的! 谢谢。
考虑以下建议:
LEFT JOIN
返回所有记录,并使用条件汇总来计数cnt字段中的匹配项。 稍后,您可以使用此cnt在PHP中运行更新超链接。 查看if
在获取循环中阻塞。 FROM
, JOIN
, ON
和WHERE
之前留出空间。 GROUP BY
子句进行汇总查询。 未聚合的列必须出现在此子句中,否则违反ANSI SQL。 不幸的是,MySQL允许关闭ONLY_FULL_GROUP_BY
模式,而其他所有RDBMS都会正确抛出错误。 $SESSION
日期作为参数传递给准备好的语句。 看到了?
字符串中的占位符。 的PHP
$sql = "SELECT g.game_feed_game_id, g.home_team, g.away_team, " .
" SUM(CASE WHEN g.game_feed_game_id IS NOT NULL " .
" THEN 1 ELSE 0 END) as cnt " .
"FROM game_feed_mlb g " .
"LEFT JOIN user_picks u " .
" ON u.game_feed_game_id_fk = g.game_feed_game_id " .
"WHERE g.`date` = ? AND u.user_id_fk = 1 " .
"GROUP BY g.game_feed_game_id, g.home_team, g.away_team;"
// CONFIGURE PREPARED STATEMENT AND BIND PARAMETER
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("s", $_SESSION['date']);
// EXECUTE STATEMENT AND RETURN RESULTS
$stmt->execute();
$result = $stmt->get_result();
if (mysqli_num_rows($result) > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$count = $row["cnt"];
$game_id = $row["game_feed_game_id"];
$home_team = $row['home_team'];
$away_team = $row['away_team'];
echo $game_id;
if($row['cnt'] > 1) {
// change links accordingly...
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.