我正面臨小問題以獲取價值。用於比較兩個逗號分隔值的Mysql查詢
我的數據庫中值是48,53,40,我得到價值48,40,53作爲結果。我想比較兩個值並顯示輸出。兩者都是相同的價值。只有順序是不同的。
任何人都可以幫我嗎?
我正面臨小問題以獲取價值。用於比較兩個逗號分隔值的Mysql查詢
我的數據庫中值是48,53,40,我得到價值48,40,53作爲結果。我想比較兩個值並顯示輸出。兩者都是相同的價值。只有順序是不同的。
任何人都可以幫我嗎?
使用match-against
with boolean mode
並記得把全文索引列上進行查詢快。在一個領域
如 -
select * from temp_new where match(b) against('+48 +53 +40' in boolean mode);
我想你會得到那些字符串。
你可能會爆炸的字符串,然後使用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重新設計是在這種情況下,身體健康!
據我所知,作者想在數據庫上進行比較,而不是在調用代碼上進行比較。否則,使用爆炸,排序和array_diff會讓你不寫這個函數:-) – 2012-04-18 07:48:52
@ ChristophGrimmer-Dietrich是的,這也是一種方式,謝謝指出:) – Paul 2012-04-18 07:50:48
謝謝保羅。但我有多個值,如'48,53,40','49,53,40',其中我想找到我的值'48,40,53'並顯示結果。 – 2012-04-18 07:57:10
你應該使用array_diff而不是自己創造。
存儲多個值是壞的,如果可能的話重做分貝。這樣你就不得不單獨使用通配符搜索值,但是它們不能被正確地編入索引,所以它不起作用 – 2012-04-18 07:26:47
你可以發佈'SHOW CREATE TABLE yourTable'的輸出和你用來獲取這個值的查詢嗎?你是什麼意思'在我的數據庫中值是X' - 你怎麼看?什麼是'我得到的價值是結果' - 你怎麼看? – Konerak 2012-04-18 07:28:49
我認爲這裏最好的方法是重新考慮你的數據庫模式的設計。如果它不可行,你可能會感興趣的看[at](http://www.marcogoncalves.com/2011/03/mysql-split-column-string-into-rows/) – 2012-04-18 07:29:46