我正面临小问题以获取价值。用于比较两个逗号分隔值的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