有没有办法执行接受一个值数组的MySQL查询,只返回找到的第一个值的结果?

时间:2016-07-26 19:26:32

标签: php mysql

我试图找出是否有办法运行单个查询,该查询接受要搜索的值数组并逐个查找,直到找到结果。

基本上我想采用这种设置并将其放在一个查询中:

$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()。

3 个答案:

答案 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 ;;