【问题标题】:Trying to get all data from one table试图从一张表中获取所有数据
【发布时间】:2017-01-25 13:56:43
【问题描述】:

我正在尝试从一个表中获取所有数据并使用另一个表中的 id 输出它。我的团队有成员,每个成员都有一组分数。

我需要使用我的 thirs 表来输出成员和得分,该表包含成员和团队的 ID,因此是 team_members 表。

每个成员有 8 个分数,是 1-5 的单个值或整数,不多也不少。我想简单地输出在他们旁边得分的行中的成员。我真的很挣扎:

我将来自表单输入的团队 ID 存储在会话中,因此我的选择查询可以查看该 ID 以向我显示来自该特定团队的成员:

$sql = "SELECT t.team_name AS team_name, m.score_1, GROUP_CONCAT(m.firstName, ' ', m.lastName) AS team_members 
FROM members AS m
JOIN team_members AS tm
ON tm.member_id = m.member_id 
JOIN teams AS t
ON t.team_id = tm.team_id
WHERE t.dashboard_id = $dashboard_id AND t.team_id = $teamSelect
GROUP BY t.team_name"; 

if(!$result = $conn->query($sql)) {}

while($row = $result->fetch_assoc()){

echo '<h2>' . $row["team_name"] . '</h2><br>';

$names = explode(',', $row['team_members']);

echo '<div class="teamTable">';

echo '<div class="tableHeader">';
echo '<div class="col">&nbsp;</div>';
echo '<div class="col">SDO</div>';
echo '<div class="col">DCTO</div>';
echo '<div class="col">ED</div>';
echo '<div class="col">CA</div>';
echo '<div class="col">DHPT</div>';
echo '<div class="col">IRT</div>';
echo '<div class="col">GL</div>';
echo '<div class="col">IL</div>';
echo '</div>';
} 

我现在要做的是按团队 ID 逐行输出成员姓名

foreach($names as $name) {
$namearray = preg_split('/\s+/', $name);
echo '<div class="tableNameRow">';
echo '<div class="col">' . $name . '</div>';
$sql2 = "SELECT score_1 FROM members WHERE firstName + lastName = '" . $name . "'";
$result2 = $conn->query($sql2);
if($result2->num_rows > 0){
while($row2 = $result2->fetch_assoc()){
echo '<div class="col">' . $row2['score_1'] . '</div>';
}
echo '<br>';
}
echo '</div>';
}

我要做的就是在行中显示每个成员,他们旁边的 8 个分数如下所示:

member1 1 2 3 4 5 2 3 4
member2 4 3 2 5 1 2 4 2
member3 2 3 4 5 5 4 3 1

我只在我的 SELECT 中包含 score_1 来解决这个问题。在我上面的代码中发生的情况是它逐行输出每个用户,然后从每个成员那里获取 score_1 并将其放在与成员名称相同的行上。

表格

members
member_id(PK), firstName, lastName, score_1, score_2, score_3, score_4, score_5, score_6, score_7, score_8 

teams
team_id(PK), team_name

team_members
team_member_id, member_id(FK), team_id(FK)

【问题讨论】:

  • 您的表成员对每个分数都有一个单独的列(score_1、score_2、score_3....)?那么为什么不在查询中选择这些分数呢?
  • 您的查询不是 sql 注入安全的。这是一个很大的安全整体。请使用Prepared Statements。
  • @radicarl 我知道它可以注射,但是我可以触摸你的第一条评论吗?你能解释一下你的意思吗?
  • @Strawberry 我想要一种能够按团队向成员展示的方式
  • @Strawberry 我有点急于重新开始整个事情......?

标签: php mysql


【解决方案1】:

对于任何想知道的人,我通过更改选择找到了它:

$dansql2 = "SELECT team_members.team_id, team_members.member_id, members.member_id, members.firstName, members.lastName, members.score_1, members.score_2, members.score_3, members.score_4, members.score_5, members.score_6, members.score_7, members.score_8
            FROM team_members 
            JOIN members
            ON team_members.member_id = members.member_id
            WHERE members.dashboard_id = $dashboard_id AND team_members.team_id = $teamSelect
            ORDER BY members.firstName ASC";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-20
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    相关资源
    最近更新 更多