2016-04-05 7 views
1

Ich werde mich bemühen, dies zu erklären .. also zögern Sie nicht, nach mehr Informationen zu fragen.Hervorhebung der MySQL-Daten Ergebnisse

lese ich Daten aus einer MySQL-DB:

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

Dies führt zu Ergebnissen wie folgt aus:

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 

Dies ist, wo es schwer ist, zu erklären.

Ich Looping durch die Ergebnisse und Echo aus den Ergebnissen in eine <table>

Wenn diese Live gibt es Hunderte von Einträgen für jeden Namen erscheinen kann, was ich es Ausgabe markieren tun wollen, basierend auf einige spezifische Kriterien .

Zum Beispiel:

Wenn ein Name mehrmals erscheint, vergleichen Sie die neuesten und früheren Werte von STACK & REF für diesen Namen. (Vergleich der letzten beiden Einträge pro Name)

Wenn sie unterschiedlich sind, markieren Sie die Ausgabe für diesen Eintrag.

dh:

kann ich sehen, Local List zweimal in der Liste erscheint. Der erste Datumsstempel ist 2016-01-01 06:34:50 & dann bei 2015-12-30 16:48:23

Das ist in Ordnung. In beiden Fällen sind STACK und REF identisch.

Jedoch erscheint LANWISE auch zweimal, aber es ist STACK anders bei der neueren Gelegenheit. Wie markiere ich das und markiere den LETZTEN Eintrag für LANWISE.

Ich suche auch, ob ein Eintrag in den letzten 65 Tagen nicht erschienen ist.

Also Blick auf die Liste BALAND zuletzt erschien 2015-10-14 11:02:22 so ist dies mehr als 65 Tage und sie sind seit nicht erschienen. Wie markiere ich das?

Dank

Antwort

0

Ich weiß nicht, ob es der beste Weg ist, aber ich habe so etwas ($variable ist das Ergebnis der Anfrage)

$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) 
} 

Mit dem isset($already[$value['name']]) Sie wissen, ob die Linie vorher vorhanden. Und mit dem == comparator wissen Sie, ob es den gleichen Wert ist.

Verwenden Sie CSS und HTML-Attribute für die Hervorhebung der betroffenen Zeilen.

Passen Sie diesen Code für Ihre Verwendung, es ist nur ein Beispiel für Ihre Post.

Für das Vergleichsdatum können Sie DateTime verwenden.Anwendungsbeispiel:

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

($xDateDebut ist ein explosed SQL Datumsfeld)

$delaisAvantJourJ ist jetzt ein Objekt mit einer Menge nützlicher Informationen (wie die Anzahl der Tage diff)

+0

Vielen Dank für das Betrachten. Wie mache ich es, wenn der Eintrag länger als 65 Tage ist? – Tom

+0

@Tom aktualisiert :) – Xenofexs

0

Sie verwenden können die folgende Abfrage, die alle Informationen zurückgibt, die erforderlich sind, um Datensätze zu bestimmen, die hervorgehoben werden müssen:

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