2017-03-12 58 views
0

我已經搜索了高和低的答案,甚至教程如何做到這一點。PHP突出顯示來自MySQL的重複值表的行

我有一張表,其中包含一些數據。 數據顯示在HTML表格中。

我想要做的是突出顯示具有重複值的行。

下面是我的表中的實際數據。其中一些包含重複項。閱讀MySQL的

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 

我的PHP函數爲:

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; 
} 
} 

我知道,這不是一個網站,以獲取代碼建立在自己不嘗試一些,但事實是,我不知道在哪裏開始。我不是要求某人爲我做100%,但我正在尋求指導。

我已經看到很多使用MySQL JOIN的答案,但我不想這樣做。我只是想突出顯示那些特定的行,以便我可以進入並更改記錄或刪除它們。

我發現這個問答& A,但它給了我頭疼,因爲我不明白,接受的答案是如何發揮作用的:How to highlight rows if they contain duplicate data?

還有一些只有兩列我要重複檢查。 Alpha Tag列和Frequency列。

現在,答案已經向我指出了正確的方向,這是我一直沒有運氣迄今爲止嘗試,但它是一個開始:

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

也許你應該只將數據分組? '選擇,計數(*)來自頻率GROUP BY ORDER BY Frequency'當您分組時,您無法進行選擇*。任何你選擇的,必須是條件的一部分,除非它是一個聚合函數,如count,avg,sum等。 – Augwa

回答

1

你可以重寫查詢是這樣的:

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

然後while您可以突出顯示與重複:

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

更新:

另一種方式來編寫查詢,顯示,並保持副本(不分組):

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

我試過了一些你的建議(你的查詢不匹配我的MySQL表),我沒有得到一個亮點,但我編輯了我的問題,包括我剛纔嘗試的底部。 –

+0

在你的查詢中,你需要用'count(*)count'替換'count(*)',如我的代碼示例所示。 – Gab

+0

哎呦忽略了這一點。好吧現在突出顯示哪些行是一個加號,但重複的結果由於某種原因沒有顯示。它說我有重複,但只有一個出現,而不是一對。 –