2012-04-18 25 views
1

値を得るために小さな問題に直面しています。私のデータベース値で2つのカンマ区切りの値を比較するMySQLクエリ

48,53,40であり、私は結果として値48,40,53を取得します。私は両方の値と出力を比較したいと思います。どちらも同じ値です。シーケンスのみが異なります。

誰でも私を助けることができますか?

+5

れたまま、そのようなは、悪いです。この方法では、ワイルドカードを使用して値を別々に検索する必要がありますが、インデックスを正しく作成することができないため無効です –

+1

SHOW CREATE TABLE yourTableの出力とこの値を取得するために使用するクエリを投稿できますか? 「私のデータベースの価値はXです」とどういう意味ですか - どう見てますか? 「私は結果として価値Yを得る」とは何ですか - あなたはそれをどのように見ますか? – Konerak

+0

私はあなたのDBスキーマのデザインを考え直すことが最善の方法だと思います。実現できない場合は、[at](http://www.marcogoncalves.com/2011/03/mysql-split-column-string-into-rows/) –

答えて

2

使用match-againstwith boolean modeと高速なクエリを作るために、列にフルテキストインデックスを置くことを忘れないでください。可能性があなたのデシベルをやり直す場合

つのフィールドに複数の値を格納する

select * from temp_new where match(b) against('+48 +53 +40' in boolean mode); 
0

あなたはそれらを文字列に入れているとします。

あなたはin_array()を使用し、その後、文字列を爆発可能性:

<?php 
$foo = '48,53,40'; 
$bar = '48,40,53'; 


function are_equal($foo, $bar, $separator = ','){ 
    $foo = explode($separator, $foo); 
    $bar = explode($separator, $bar); 

    foreach($foo as $number){ 
     if(!in_array($number, $bar)){ 
      return FALSE; 
     } 
    } 

    return TRUE; 
} 

var_dump(are_equal($foo, $bar)); 

しかし、もちろんDBの再設計は、この場合には、健康になります!

+0

をご覧になることをお勧めします。 DBでの比較を行い、呼び出しコードでは行いません。それ以外の場合は、explode、sort、array_diffを使用して、その関数を書くことができます:-) –

+0

@ ChristophGrimmer-Dietrichええ、これも方法です、それを指摘してくれてありがとう:) – Paul

+0

Thanks paul。しかし、私は'48、53,40 '、'49、53,40'のような複数の値を持っており、それらの中で私の値'48、40,53 'を見つけてその結果を示したいと思います。 –

関連する問題