突出显示MySQL数据结果

时间:2016-04-05 16:01:41

标签: php mysql compare

我很难解释这个......所以请随时询问更多信息。

我从MySQL数据库读取数据使用:

SELECT * FROM resource where date > DATE_SUB(now(), INTERVAL 12 MONTH) ORDER BY `date` DESC

这会产生如下结果:

ID  DATE                STACK   REF NAME        LOCATION    CREW
9   2016-01-01 06:34:50 A6YH75F 12  Local List  SPAIN       1A
8   2016-01-01 06:34:48 QWE343  23  POINT ONE   GERMANY     3A
7   2016-01-01 06:34:46 WER342  43  Insite      UK          4A
6   2016-01-01 06:34:44 WFF5G1  34  LANWise     FRANCE      5A
5   2016-01-01 06:34:42 2D3D35  21  Polent      USA         7A
4   2016-01-01 06:34:40 8541FW  33  Rosta       UK          4B
3   2015-12-30 16:48:23 A6YH75F 12  Local List  SPAIN       2A
2   2015-11-21 14:32:01 FFCWF4  34  LANWISE     FRANCE      6A
1   2015-10-14 11:02:22 POI8H6  75  BALAND      IRELAND     6B

这是很难解释的地方。

我循环显示结果并将结果回显到<table>

当它出现时,每个NAME可能会出现数百个条目,我想要做的是根据某些特定标准突出显示输出。

例如:

如果NAME多次出现,请比较STACK&amp;的最新值和先前值。该名称的REF。 (所以比较每个名字的最后两个条目)

如果它们不同,则突出显示该条目的输出。

即:

我可以看到Local List在列表中出现两次。第一个日期戳是2016-01-01 06:34:50&amp;然后在2015-12-30 16:48:23

很好。在两种情况下,STACK和REF都是相同的。

然而,LANWISE也会出现两次,但在较新的场合,它的堆叠会有所不同。我如何标记这一点并突出显示LANWISE的最新条目。

我还想查看过去65天内是否有参赛作品出现。

所以查看最后出现的BALAND列表2015-10-14 11:02:22所以这超过了65天而且从那时起它们还没有出现。我该如何突出这一点?

由于

2 个答案:

答案 0 :(得分:0)

我不知道这是不是最好的方式,但是我做了类似的事情($variable是您查询的结果)

$already = array();

#The loop where you make your table. I use foreach but use your current loop (probably while if you fetch a query response) : 
foreach ($variable as $key => $value) {

    $class='';

    if(isset($already[$value['name']]) && $already[$value['name']] == $value['date']) {
        $class='highlight';
    }

#The next time, the variable exist :
    $already[$value['name']] = $value['date'];

    #do your stuf and add $class to your class in your HTML (and do something inyour CSS)
}

使用isset($already[$value['name']]),您知道之前是否存在该行。使用== comparator,您知道它是否是相同的值。

使用CSS和类HTML属性突出显示相关行。

根据您的使用情况调整此代码,它只是基于您的帖子的示例。

对于比较日期,您可以使用DateTime。使用示例:

$datetime1 = new DateTime($xDateDebut[2].'-'.$xDateDebut[1].'-'.$xDateDebut[0]);
$datetime3 = new DateTime(date('Y').'-'.date('m').'-'.date('d'));
$delaisAvantJourJ = $datetime1->diff($datetime3);

$xDateDebut是一个展开的SQL日期字段)

$delaisAvantJourJ现在是一个有很多有用信息的对象(比如天数差异)

答案 1 :(得分:0)

您可以使用以下查询返回所需的所有信息,以确定需要突出显示的记录:

SELECT ID, `DATE`, STACK, REF, NAME, LOCATION, CREW,
       --Calculate difference between `DATE` field and current date
       DATEDIFF(NOW(), `DATE`) AS DaysDiff,
       -- Get the count of newer records having the same NAME
       COALESCE((SELECT COUNT(*)
                 FROM resource AS r2
                 WHERE r2.NAME = r1.NAME AND r2.`Date` > r1.`Date`), 0) CountNewer,
       -- Find wether an older record exists having the same NAME and 
       -- different REF or STACK or both
       COALESCE((SELECT 1
                 FROM resource AS r3
                 WHERE r3.NAME = r1.NAME AND
                       r3.`Date` < r1.`Date` AND
                       (r3.REF <> r1.REF OR r3.STACK <> r1.STACK)), 0) IsHighlighted
FROM resource AS r1
WHERE date > DATE_SUB(now(), INTERVAL 12 MONTH) 
ORDER BY `date` DESC