2017-03-12 1 views
0

Ich habe hoch und niedrig für eine Antwort oder sogar Tutorial, wie dies zu tun.PHP Highlight Tabelle Reihen von doppelten Werten von MySQL

Ich habe eine Tabelle, die einige Daten enthält. Die Daten werden in einer HTML-Tabelle angezeigt.

Was ich tun möchte, ist markieren Sie Zeilen, die doppelte Werte haben.

Unten sind die tatsächlichen Daten in meiner Tabelle. Einige davon enthalten Duplikate.

Alpha Tag Frequency Country Usage Programmed 
WILD 3 151.50500 USA No 
WILD 2 151.51500 USA No 
PKALT1 151.57000 USA No 
QAP 151.59500 USA No 
LKJ 2 151.68500 USA No 
WILD 4 151.74000 USA No 
SUMMIT 151.77500 USA No 
ALYE 6 151.80500 USA No 
PKALT2 151.82000 USA No 
MURS 151.82 151.82000 USA No 
ALYE 5 151.83500 USA No 
PNALT1 151.88000 USA No 
MURS 151.88 151.88000 USA No 
H ROAD 151.92500 USA No 
PNALT2 151.94000 USA No 
MURS 151.94 151.94000 USA No 
MBCON2 151.95500 USA No 
ALYE 4 152.30000 USA No 
WBI K 152.91500 USA No 
MBCON1 152.93000 USA No 
WILD 1 152.99000 USA No 
ALCHWY 153.03500 USA No 
ALYE 7 153.05000 USA No 
WBI A2 153.15500 USA No 
AMB 2 154.05000 USA No 
LADD 1 154.10000 CA No 
AK RL2 154.31500 USA No 
LADD 3 154.32500 CA No 
AMB 1 154.38500 USA No 
WLD EQ 154.54000 USA No 
MURS 154.57 - Blue Dot 154.57000 USA No 
MURS 154.60 - Green Dot 154.60000 USA No 
B SHIT 154.60000 USA No 
KPD 154.72500 USA No 
FPD 155.01000 USA No 
AROW 1 155.19000 USA No 
WPD 155.37000 USA No 
MOA 155.82000 USA No 
DOT 2 156.12000 USA No 
ALYE 1 157.43000 USA No 
LKJ 1 157.66500 USA No 
ALYE 2 158.28000 USA No 
ALYE 3 158.33500 USA No 
LADD 2 158.94000 CA No 
DOT 1 159.13000 USA No 
LTIHNS 159.63000 USA No 
LTIFBX 159.84000 USA No 
AK WST 159.90000 USA No 
LTIPBY 159.96000 USA No 
C CAKE 160.08000 USA No 
SLEP 1 160.09500 USA No 
WBI A1 160.20000 USA No 
AROW 2 162.27000 USA No 
AK RL1 164.62500 USA No 
SLEP 2 170.50000 USA No 
LADD 4 173.37000 CA No 

Meine PHP-Funktion MySQL zum Lesen ist:

function getFrequencies() { 
$conn = getConnected("websiteData"); 
$frequencyQuery = "SELECT * FROM frequencies ORDER BY Frequency"; 

$frequencyResult = mysqli_query($conn, $frequencyQuery); 

while ($frequencyRow = mysqli_fetch_assoc($frequencyResult)) 
{ 
    echo "<tr>" . PHP_EOL . 
    "<td>" . $frequencyRow['Name'] . "</td>" . PHP_EOL . 
    "<td>" . $frequencyRow['Frequency'] . "</td>" . PHP_EOL . 
    "<td>" . $frequencyRow['Country'] . "</td>" . PHP_EOL . 
    "<td>" . $frequencyRow['Programmed'] . "</td>" . PHP_EOL . 
    "</tr>" . PHP_EOL; 
} 
} 

Ich weiß, dass dies nicht ein Website-Code zu bekommen gebaut, ohne selbst etwas zu versuchen, aber die Wahrheit ist, ich weiß nicht, wo anfangen. Ich fordere nicht, dass jemand 100% für mich macht, aber ich suche Führung.

Ich habe viele Antworten auf die Verwendung von MySQL JOIN gesehen, aber ich möchte dies nicht tun. Ich möchte einfach nur diese spezifischen Zeilen markieren, damit ich hineingehen und die Datensätze ändern oder löschen kann.

habe ich diesen Q & A finden, aber es gab mir Kopfschmerzen, weil ich verstehe nicht, wie die akzeptierte Antwort ins Spiel kommt: How to highlight rows if they contain duplicate data?

Auch gibt es nur zwei Spalten ich nach Duplikaten überprüfen möchten. Die Alpha Tag Spalte und die Frequency Spalte.

Nun, da eine Antwort mich in die richtige Richtung hat, ist es das, was ich ohne Glück bisher versucht haben, aber es ist ein Anfang:

function getFrequencies() { 
$conn = getConnected("websiteData"); 
//$frequencyQuery = "SELECT Name, Frequency, Country, Programmed, count(*) FROM frequencies GROUP BY Frequency ORDER BY Name"; 
$frequencyQuery = "SELECT Name, Frequency, Country, Programmed, count(*) FROM frequencies GROUP BY Frequency ORDER BY Name"; 
$frequencyResult = mysqli_query($conn, $frequencyQuery); 

while ($frequencyRow = mysqli_fetch_assoc($frequencyResult)) 
{ 
    if ($frequencyRow['count'] > 1) { echo '<tr class="danger">' . PHP_EOL; } else { echo '<tr>' . PHP_EOL; } 
    echo "<td>" . $frequencyRow['Name'] . "</td>" . PHP_EOL . 
    "<td>" . $frequencyRow['Frequency'] . "</td>" . PHP_EOL . 
    "<td>" . $frequencyRow['Country'] . "</td>" . PHP_EOL . 
    "<td>" . $frequencyRow['Programmed'] . "</td>" . PHP_EOL . 
    "</tr>" . PHP_EOL; 
} 
} 
+0

vielleicht sollten Sie gerade Gruppe Ihre Daten? 'SELECT , count (*) FROM Frequenzen GROUP BY ORDER BY Frequency' Sie können keine Auswahl * beim Gruppieren nach vornehmen. Alles, was Sie auswählen, muss Teil Ihrer Gruppe sein, sofern es sich nicht um eine Aggregatfunktion handelt, wie z. B. count, avg, sum usw. – Augwa

Antwort

1

Sie Ihre Abfrage wie folgt umschreiben kann:

SELECT Name, Frequency, Country, Programmed, count(*) as count 
FROM frequencies 
GROUP BY Frequency; 

Dann in Ihrem PHP while Sie mit Duplikate markieren können:

if ($frequencyRow['count'] > 1) { 
    // there are duplicates 
    // apply special css 
} else { 
    // one row only 
} 

Update:

Eine weitere Möglichkeit, um die Abfrage zu zeigen und halten Duplikate (keine Gruppierung) zu schreiben:

SELECT f.Name, f.Frequency, f.Country, f.Programmed, 
    (
    SELECT count(*) 
    FROM frequencies 
    WHERE Frequency = f.Frequency 
    ) as count 
FROM frequencies f 
; 
+0

Ich habe versucht, einige Vorschläge zu machen (Ihre Abfrage passt nicht zu meiner MySQL-Tabelle)) und ich habe kein Highlight bekommen, aber ich habe meine Frage bearbeitet, um zu beschreiben, was ich gerade unten versucht habe. –

+0

In Ihrer Abfrage müssen Sie "count (*)" durch "count (*) as count" ersetzen, wie in meinem Codebeispiel gezeigt. – Gab

+0

Hoppla hat das übersehen. Ok, die Zeilen markieren jetzt, was ein Plus ist, aber die doppelten Ergebnisse werden aus irgendeinem Grund nicht angezeigt. Es besagt, dass ich Duplikate habe, aber nur eines erscheint anstelle eines Paares. –

Verwandte Themen