2011-10-17 79 views
1

我有一個遊戲和價格的數據庫,其中我最近發現了另一個問題。有些遊戲會在數據庫中出現兩次 - 一次是PC版本,一次是Mac版本。如果有兩個這樣的遊戲版本,我不需要數據庫中的mac版本。但是,如果只有遊戲的mac版本,我想保留它。因爲所有的遊戲也有Mac版本將使用完全相同的名稱加一個小片段在結束以表明它的Mac加入相同的子字符串?

問題作出對我來說簡單一些。這可能採用「Left 4 Dead 2(Mac)」,「Left 4 Dead 2 Mac」或「Left 4 Dead 2 [Mac Download]」的形式。

,試圖找到這些條目,我創建了以下查詢:

SELECT * 
FROM `gamelist` g1 
JOIN `gamelist` g2 
ON 
    SUBSTR(g1.`title`,0,20) = SUBSTR(g2.`title`,0,20) 
    AND 
    g1.`title`<>g2.`title` 
WHERE 
    (g1.`amazon_id` IS NOT NULL AND g2.`amazon_id` IS NOT NULL) 
    OR (g1.`steam_id` IS NOT NULL AND g2.`steam_id` IS NOT NULL) 
    OR (g1.`impulse_id` IS NOT NULL AND g2.`impulse_id` IS NOT NULL) 
    ... 

的想法應該是相當簡單。問題是SUBSTR()似乎並沒有工作。在一個大約有8,000個條目的數據庫中,它返回了大約6400萬條結果。顯然這是完全跳過SUBSTR(g1.title,0,20) = SUBSTR(g2.title,0,20)線,並在任何時間加入行g1.title<>g2.title

如何加入這樣的子字符串?

回答

3

SUBSTR(),在你使用它的方式,是一個指數的,不是零索引。你想要

SUBSTR(g1.`title`,1,20) = SUBSTR(g2.`title`,1,20) 
+0

+1好點。爲了清楚起見,它不是*跳過*這是一個編碼錯誤。 –

+0

非常感謝。這清除了它的權利。 – stevendesu

相關問題