2011-10-17 16 views
1

私はゲームと価格のデータベースを持っていますが、最近私はさらに別の問題を発見しました。データベースにはPC版とMac版の2回のゲームが2回出現します。このようなバージョンのゲームが2つある場合、データベースに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万の結果を返しました。明らかにそれは完全に私はこのような同等のサブストリングに参加することができますどのように、いつでもg1.title<>g2.title

SUBSTR(g1.title,0,20) = SUBSTR(g2.title,0,20)ラインをスキップして、行を結合していますか?

答えて

3

SUBSTR()は、使用している方法でインデックスが1つで、インデックスがゼロではありません。あなたが欲しい

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

+1素晴らしいスポット。わかりやすくするために、それは*スキップしていませんでした*コーディングエラーでした。 –

+0

ありがとうございました。これでそれがクリアされました。 – stevendesu

関連する問題