2012-04-18 130 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