MySQL:同时进行多个搜索/选择查询?

时间:2013-03-19 15:22:54

标签: php mysql

我有一个关于如何进行我正在进行的项目的下一阶段的问题。

第一阶段:

创建一个php脚本,用于抓取所有.txt文件的目录。 打开/解析每一行,爆炸成阵列...... 循环遍历数组挑选出所需的数据并将所有内容插入数据库(插入120 + .txt文件和100k记录)..

这引导我进入下一步,

第二阶段:

我需要获取数千个数字中的10个数字的'列表'。 循环遍历每一个,使用该数据(数字)作为搜索项到QUERY数据库..如果找到匹配,我需要在同一记录/行的不同列中获取一段数据..

我计划采取的一般想法/步骤

  1. 抓取目录以查找“源”文本文件。
  2. 打开/解析'源文件'....逐行...
  3. 通过分隔字符爆炸每一行..并抓住'目标搜索号'
  4. 将每个号码转储到“主列表”数组......
  5. 遍历我的'主列表'数组..使用我的搜索(SELECT)语句中的每个数字..
  6. 如果找到匹配项,请在匹配/返回的行(记录)中的另一列中获取一段数据......
  7. 将此数据输出到屏幕或.txt文件(尚未确定该步骤,...最有可能通过新行返回的数字文本文件)
  8. 具体细节:

    我不确定如何进行这样的“多重”搜索/选择语句?

    如何使用唯一的搜索词执行多个SELECT语句?并收集返回的列数据?

    数据库是否足够快以在这样的循环中返回匹配的值/数据?在重复循环之前,我是否需要以某种方式等待/暂停/延迟返回数据?

    谢谢!

    我正在使用/尝试的当前功能:

    这是我目前所处的位置:

    $harNumArray2 = implode(',', $harNumArray);
    //$harNumArray2 = '"' . implode('","', $harNumArray) . '"';
    $query = "SELECT guar_nu FROM placements WHERE har_id IN ($harNumArray2)";
    echo $query;
    
    $match = mysql_query($query);
    //$match = mysql_query('"' . $query . '"');
    $results = $match;
    echo("<BR><BR>");
    print_r($results);
    

    我分别得到这些输出:

    数组([0] =&gt; sample_source.txt)

    GRAB HAR ID的总文件数量来自:1

    所有文件中发现的TOAL HARS:5 SELECT guar_nu FROM placements WHERE har_id IN(“108383442”,“106620416”,“109570835”,“109700427”,“100022236”)

    &安培;

    数组([0] =&gt; sample_source.txt)

    GRAB HAR ID的总文件数量来自:1

    所有文件中发现的TOAL HARS:5 SELECT guar_nu FROM placements WHERE har_id IN(108383442,106620416,109570835,109700427,100022236)

    我在哪里坚持实际执行它?

    谢谢!

    更新

    这段代码似乎工作'好'..但我不明白如何正确处理重新定义的数据..我似乎只输出(打印)最后一个变量/行数据...而不是整个列表..

    $harNumArray2 = implode(',', $harNumArray);
    //$harNumArray2 = '"' . implode('","', $harNumArray) . '"';
    $query = "SELECT guar_nu FROM placements WHERE har_id IN ($harNumArray2)";
    echo $query;
    
    $match = mysql_query($query);
    //$match = mysql_query('"' . $query . '"');
    $results = $match;
    echo("<BR><BR>");
    print_r($results);
    

    如何正确处理此返回的数据?

    谢谢!

2 个答案:

答案 0 :(得分:0)

我不知道这是否能回答你的问题,但我认为你在询问子查询。它们非常简单,只是看起来像这样

SELECT * FROM tbl1 WHERE id = (SELECT num FROM tbl2 WHERE id = 1);

仅当第二个子查询有一个唯一值时才会起作用。如果它返回多行,它将返回一个解析错误。如果必须选择多行研究JOIN语句。这可以帮助你入门

http://www.w3schools.com/sql/sql_join.asp

答案 1 :(得分:-1)

我不确定如何进行这样的“多重”搜索/选择语句?

关于多重选择,(我假设您使用的是MySQL),您只需使用“IN" keyword

即可执行此操作

例如:

SELECT * 
FROM YOUR_TABLE 
WHERE COLUMN_NAME IN (LIST, OF, SEARCH, VALUES, SEPARATED, BY COMMAS)

编辑:关注问题中的更新代码。

在我们继续之前的一点......你应该尝试避免PHP中的mysql_函数用于新代码,因为它们即将被弃用。考虑使用通用的PHP DB处理程序PDO或更新的mysqli_函数。有关为您选择“正确”API的更多帮助是here

如何正确处理此返回的数据?

为了处理多行数据(你是),你应该使用一个循环。像下面这样的东西应该这样做(我的例子将使用mysqli_函数 - 这可能与你一直使用的API有点类似):

  $mysqli   = mysqli_connect("localhost", "user", "pass");
  mysqli_select_db($mysqli, "YOUR_DB");

  // make a comma separated list of the $ids.
  $ids = join(", ", $id_list);

  // note: you need to pass the db connection to many of these methods with the mysqli_ API
  $results  = mysqli_query($mysqli, "SELECT har_id, guar_num FROM placements WHERE har_id IN ($ids)");
  $num_rows = mysqli_num_rows($results);

  while ($row = mysqli_fetch_assoc($results)) {
    echo "HAR_ID: ". $row["har_id"]. "\tGUAR_NUM: " . $row["guar_num"] . "\n";
  }  

请注意,这是非常基本的(并且未经测试!)代码,只是为了显示最少的步骤。 :)