這是一個PDO查詢。儘管使用GROUP BY,我仍然得到重複的結果。去聯盟時過濾重複結果
第一個表table1包含一個包含TG組的條目列表。
第二個表table2鏈接回一個表,其中列出了與查詢的網絡關聯的所有組TG。有時在兩個表中有重複的條目,除了「訪問」值。所有其他的SELECT數據都是一樣的。我想從訪問值不同的同一組TG的DMR_Networks表中過濾掉所有條目。來自DMR_repeater_links表的值在衝突時獲勝。
table3是列出了所有可能的TG的標準化表,但訪問值仍然與table1和table2保持一致。
這裏是我的查詢:
$SQL="SELECT table3.`TG`,
TS,
table3.`assignment`,
`access`
FROM table1
INNER JOIN table3 on table1.RB_TG_ID = table3.RB_TG_ID
WHERE `state_ID`=:state_id
AND `rpt_ID`=:ID
GROUP BY table3.`TG`
UNION
SELECT table3.`TG`,
TS,
table3.`assignment`,
`FP` as `access`
FROM table2
INNER JOIN table2
ON table2.RB_TG_ID = table3.RB_TG_ID
WHERE table2.Network = '".$row_network['Network']."'
GROUP BY table3.`TG`
ORDER BY `TS`, `TG`";
WHILE ($row_talk_groups = $link_DMR->fetch(PDO::FETCH_ASSOC)) {
結果返回重複的甘油三酯,因爲訪問值是不同的。我無法弄清楚如何隔離TG列上的DISTINCT值或如何在整個查詢中的TG列上分組GROUP BY。
我試圖
WHILE ($row_talk_groups = $link_DMR->fetchAll(PDO::FETCH_GROUP)) {
但是,它無法顯示任何結果。
下面是工作的最終查詢:
$SQL="SELECT unionResult.TG, unionResult.TS, unionResult.assignment, unionResult.access
FROM
(SELECT table3.`TG`, `TS`, table3.`assignment`, `access`
FROM table1
INNER JOIN `table3` on table1.RB_TG_ID = table3.RB_TG_ID
WHERE `state_ID`=:state_id AND `rpt_ID`=:ID
UNION SELECT DISTINCT table3.TG, TS, table3.`assignment`, `FP` as `access`
FROM table2
INNER JOIN `table3` on DMR_Networks.RB_TG_ID = table3.RB_TG_ID
WHERE table2.Network = '".$row_network['Network']."')
AS unionResult GROUP BY `TG`";
謝謝。有效! – Garrett
就SQL注入問題而言,$ row_network ['Network']直接來自我在頁面上運行的查詢的結果。這不安全嗎?我遇到的問題是綁定變量的數量有誤,因爲它沒有在兩個查詢中使用。 – Garrett
假設這是創建「網絡」事件時提交的某個表單字段的值,那麼有人可以在其中輸入一個特殊值,這會在您的發佈代碼中觸發SQL注入。所以不,你的發佈代碼不一定是安全的,即使值直接來自數據庫本身。 – user268396