【问题标题】:change color of list elements according to condition根据条件更改列表元素的颜色
【发布时间】:2017-05-20 02:35:10
【问题描述】:

我有两张桌子:

表 1(总分)

表2(每周得分)

我有一个排行榜,我在上面呼应了表 1 的总体得分值:

问题: 我在这里要做的是,无论谁在表 2(每周得分)中得分为“-10”,我想通过突出显示其框的颜色来提醒用户排行榜,现在是黄色,变为红色。

当前涉及的 css:

li mark div {
    display: block;
    margin: 4px;
    padding: 5px;
    min-height: 50px;
    border: 2px solid #eebb55;
    border-radius: 7pt;
    background: grey;
}

涉及显示列表的 PHP。这是“整体”(排行榜中的右侧标签)。每周也存在类似的情况。

<div id="overalllb" class="leadboardcontent" style="display:none">
    <div class="leaderboard">
        <ol>
            <li>
                <mark>
                    <?php  while( $toprow2 = sqlsrv_fetch_array( $stmt3) ) {
                        echo  "<div class='parent-div'><span class='rank'>" . $toprow2['overallRank'] . "</span><span class='name'>" . $toprow2['EmployeeName'] . "</span><span class='points'>" . $toprow2['Total_points_Rewarded'] . "</span></div>";
                    } ?>
                </mark>
            </li>
        </ol>
    </div>

通过查询从两个表中检索信息:

1.query 1 - 找出所有得分为-10的员工。

$q200 = " select *
  from Table2
  where  WeekNumber = 'week1' and pointsRewarded = '-10';";
  $stmt200=sqlsrv_query($conn,$q200);
  if($stmt200==false)
  {
  echo 'error to retrieve info !! <br/>';
  die(print_r(sqlsrv_errors(),TRUE));
  }

查询 2- 从表 1 中检索所有员工:

$q20 = "select *
  from EmployeeTable
  order by Total_points_Rewarded desc";
  $stmt20=sqlsrv_query($conn,$q20);
  if($stmt20==false)
  {
  echo 'error to retrieve info !! <br/>';
  die(print_r(sqlsrv_errors(),TRUE));
  }

我尝试过的代码:

<?php while( $toprow20 = sqlsrv_fetch_array( $stmt20) ) {

echo  "<div class='parent-divv'><span class='rank'>" . $toprow20['overallRank'] . "</span><span class='name'>" . $toprow20['EmployeeName'] . "</span><span class='points'>" . $toprow20['Total_points_Rewarded'] . "</span></div>";

}?>
<?php if ($toprow20['EmployeeID'] == $toprow200['EmployeeID'] ) ?>{
  <style>
  .parent-divv {
  border: 1px solid red;
  }
  </style>
}

上面的代码将所有颜色更改为红色。我只希望两个查询中匹配的名称/ID 为红色。其余保持原样。 我正在使用 PHP,请给我一个方法。上帝保佑。

【问题讨论】:

  • 一定要使用 if else contition 不是一个简单的 if
  • 为每种样式创建一个类并将这些类分配给适当的元素。
  • @liza 嗯...,好的。那么这个声明and pointsRewarded = '-10' 我不确定,因为它可能被解释为一个字符串。如果这是一个 sql 问题,请尝试 and pointsRewarded = -10。顺便说一句,points 的列类型是什么?另外,你在哪里定义$toprow200?你确定你不是说$toprow20 吗?如果它是一个错字,那么错误报告会告诉你一个未定义的变量。
  • @liza 有趣;看看你的问题;它同时包含“javascript”和“jquery”标签lol 如果你没有包含它们,“goblins”?大声笑

标签: javascript php jquery html css


【解决方案1】:

1) 将查询合二为一

select EmployeeTable.*,Table2.pointsRewarded as `weeklyDelta`
from EmployeeTable join Table2 on EmployeeTable.EmployeeID = Table2.EmployeeID
where Table2.WeekNumber = 'week1'
order by Total_points_Rewarded desc

2) 然后给具有负deltas的员工一个特殊的类

<?php  
while( $toprow2 = sqlsrv_fetch_array( $stmt3) ) {
    echo  "<div class='parent-div" .
        ($toprow2['weeklyDelta'] <= -10 ? " dropped" : "") .
        "'><span class='rank'>" .
        $toprow2['overallRank'] . "</span><span class='name'>" . 
        $toprow2['EmployeeName'] . "</span><span class='points'>" . 
        $toprow2['Total_points_Rewarded'] . "</span></div>";
} ?>

3) 给这些员工一种风格

.parent-div.dropped { color:red }

【讨论】:

  • 感谢您的输入。现在,我不想在表中添加另一个属性,因为我需要的任何内容都可以从两个查询中获得。我只想从数据中匹配他们的 ID/名称从两个查询中检索,如果存在相同的名称,则将颜色更改为红色。
  • 我也不想在任何地方回应分数 0f -10 的员工。我只想让他们的名字在列表中时变成红色。
  • 这不是向表中添加属性,只是查询结果。它也更有效,因为您只需使用所需的所有数据访问数据库一次,而不是两次。此外,它不会与 -10 相呼应,如果它们是 -10,它只是一个新的类名。
  • 使用上面的查询将在员工表中创建一个名为“weeklyDelta”的新列。我相信您的解决方案非常接近我正在尝试的解决方案。只是我不想要一个新列。我的数据库中的表包含大量数据,不仅仅是我上面提到的这四个条目。只是为了给大家解释一下。
  • 它没有在表格中添加任何内容,只是在返回的结果中。如果您确实有大量数据,那么这是最有效的方法。否则,您需要为查询 1 中的每个条目循环遍历查询 2 中的每个条目,以查看它们是否匹配。将查询合二为一可以让数据库为您完成这项工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-23
  • 2013-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多