繁体   English   中英

Mysql连接两个表以检查用户是否选择了

[英]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_teamaway_team ),如果有,我将在屏幕上将链接从make_pick更改为change_pick (带有if($count)语句)。

但是,当前我什至没有得到任何数据,这意味着我的sql可能不正确。 任何帮助将是巨大的! 谢谢。

考虑以下建议:

  1. 使用LEFT JOIN返回所有记录,并使用条件汇总来计数cnt字段中的匹配项。 稍后,您可以使用此cnt在PHP中运行更新超链接。 查看if在获取循环中阻塞。
  2. 如前所述,连接换行符的SQL字符串不会在SQL子句FROMJOINONWHERE之前留出空间。
  3. 使用GROUP BY子句进行汇总查询。 未聚合的列必须出现在此子句中,否则违反ANSI SQL。 不幸的是,MySQL允许关闭ONLY_FULL_GROUP_BY模式,而其他所有RDBMS都会正确抛出错误。
  4. 使用表别名以获得更易读的代码,而不是重复长名称表。
  5. $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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM