我试图找出是否有办法运行单个查询,该查询接受要搜索的值数组并逐个查找,直到找到结果。
基本上我想采用这种设置并将其放在一个查询中:
$arr_vals = [ array of values here ];
foreach( $arr_vals as $arr_val ){
$results = mysql_query( SELECT * FROM my_db WHERE some_field = $arr_val );
if( mysql_num_rows( $results ) ){
return $results;
}
}
因此,如果有任何方法不运行多个查询并仅返回当前值的结果。我宁愿不限制,我也不愿意用PHP过滤结果,因为结果计数可能很高。
感谢。
EDIT !!!
我不想要一个单一的'在这里匹配。我希望得到第一个匹配值的结果,可以是1行或1000行... LIMIT可以在以后放置,但我不希望这是答案的拐点......显然这是一个简单的答案,如果LIMIT为1 ......那么我只使用IN()。
答案 0 :(得分:2)
因此,您有一个值数组要用作条件,但每个值可能匹配许多行,并且您只需要匹配的第一个值匹配,但您希望所有匹配的行。所以LIMIT完全没有做你想做的事。
假设PHP变量$values
是以逗号分隔的整数列表,因此这些值可以安全插入(不会创建SQL注入漏洞):
SELECT t.*
FROM MyTable AS t
JOIN (
SELECT someField
FROM MyTable
WHERE someField IN ($values)
ORDER BY FIND_IN_SET(someField, '$values')
LIMIT 1
) AS first ON (t.someField = first.someField);
如果值不是整数,那么你必须制作两个PHP变量,一个是单独引用每个值,另一个是单引号,而不是引用。
演示:SQLFiddle
答案 1 :(得分:0)
$arr = [1,2,3,4,5]
$arr_str = implode (", ", $arr);
select * from my_db where unq_col = (SELECT unq_col FROM my_db WHERE some_field in ($arr_str) limit 1)
答案 2 :(得分:-1)
$ query =" SELECT * FROM table_name其中some_field in('" .implode(',',$ arr_vals)。"&#39 ;)&#34 ;;