2

我已经从 mysql 数据库中提取数据select *,目的是多次使用数据而不使用 .sql 进行重复的 sql 查询WHERE

使用此数据,我正在提取包含搜索元素的行

while($row=mysql_fetch_array($query_result)){  <<<if match add to new array>>>  }

由于有数千行,这花费的时间比我想要的要长。

我正在尝试使用:

$row=mysql_fetch_array($query_result);
$a = array_search($word_to_check, $row);
echo $a;

这会提取正确的 sql 标题,但不会提取行号。我想要实现的是

如果$word在 mysql_fetch_array($query_result) 中找到,则将找到它的行添加到新数组中进行处理。

有什么想法吗?提前致谢。

4

2 回答 2

2

不要使用已弃用的mysql_* 函数。请改用mysqlipdo

在 php 中搜索 mysql 结果数组是不明智的,而可以在 mysql 中完成。假设你有一张桌子,你想在数字列中找到所有大于 5 的数字

  SELECT FROM table_name WHERE number>5

要查找文本,您可以使用简单子句

  SELECT FROM table_name WHERE name = 'username'

您还可以创建更复杂的条件。

来自 MYSQL 手册:

WHERE 子句(如果给定)指示选择行必须满足的一个或多个条件。where_condition 是一个表达式,对于要选择的每一行计算结果为真。如果没有 WHERE 子句,该语句将选择所有行

检查此链接

于 2013-06-06T12:13:24.713 回答
0

如果您只想将查询限制为一次,请将所有结果提取到临时数组中,然后像下面这样进行搜索

<?php
$all_rows=array();
$match_rows=array();
$i=0;
$limit=100000;
while($row=mysql_fetch_array($query_result)){  
   $all_rows[]=$row;
   if($i % $limit == 0){  // this part only functions every 100,000 cycles.
      foreach($all_rows as $search_row){
        if(array_search($word_to_check, $search_row)
            $match_rows[]=$search_row;
        } 
      $all_rows=array();//reset temporary array
   }
   $i++;
}

//This solution assumes the required word can be found in mulitple columns
于 2013-06-06T12:34:54.353 回答