2012-04-18 116 views
1

我正面臨小問題以獲取價值。用於比較兩個逗號分隔值的Mysql查詢

我的數據庫中值是48,53,40,我得到價值48,40,53作爲結果。我想比較兩個值並顯示輸出。兩者都是相同的價值。只有順序是不同的。

任何人都可以幫我嗎?

+5

存儲多個值是壞的,如果可能的話重做分貝。這樣你就不得不單獨使用通配符搜索值,但是它們不能被正確地編入索引,所以它不起作用 – 2012-04-18 07:26:47

+1

你可以發佈'SHOW CREATE TABLE yourTable'的輸出和你用來獲取這個值的查詢嗎?你是什​​麼意思'在我的數據庫中值是X' - 你怎麼看?什麼是'我得到的價值是結果' - 你怎麼看? – Konerak 2012-04-18 07:28:49

+0

我認爲這裏最好的方法是重新考慮你的數據庫模式的設計。如果它不可行,你可能會感興趣的看[at](http://www.marcogoncalves.com/2011/03/mysql-split-column-string-into-rows/) – 2012-04-18 07:29:46

回答

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

據我所知,作者想在數據庫上進行比較,而不是在調用代碼上進行比較。否則,使用爆炸,排序和array_diff會讓你不寫這個函數:-) – 2012-04-18 07:48:52

+0

@ ChristophGrimmer-Dietrich是的,這也是一種方式,謝謝指出:) – Paul 2012-04-18 07:50:48

+0

謝謝保羅。但我有多個值,如'48,53,40','49,53,40',其中我想找到我的值'48,40,53'並顯示結果。 – 2012-04-18 07:57:10