0

私が取り組んでいるプロジェクトの次の段階に進む方法について質問があります。

フェーズI:

すべての.txtファイルのディレクトリをスクレイピングするphpスクリプトを作成します。各行を開いて解析し、配列に分解します...配列をループして、必要なデータを選択し、すべてをデータベースに挿入します(120以上の.txtファイルと10万レコードが挿入されました)。

これは私の次のステップに私を導きます、

フェーズII:

数万の数の「リスト」を取得する必要があります。データベースをクエリするための検索語としてそのデータ(番号)を使用して、それぞれをループします。一致するものが見つかった場合は、同じレコード/行の別の列にあるデータ。

私がとる予定の一般的な考え/ステップ

  1. ディレクトリをスクレイプして「ソース」テキストファイルを見つけます。
  2. 'ソースファイル'を開く/解析する....行ごとに..。
  3. 区切り文字で各行を展開し、「ターゲット検索番号」を取得します
  4. 各番号を「マスターリスト」配列にダンプします。
  5. 「マスターリスト」配列をループします。検索(SELECT)ステートメントで各番号を使用します。
  6. 一致するものが見つかった場合は、一致する/返された行(レコード)の別の列にあるデータを取得します。
  7. このデータを..screenまたは.txtファイルのいずれかに出力します(そのステップはまだ決定されていません。..新しい行に返された各番号を介したテキストファイルである可能性があります)

詳細:

このような「複数の」検索/選択ステートメントを実行する方法がわかりませんか?

それぞれが一意の検索語を持つ複数のSELECTステートメントを実行するにはどうすればよいですか?また、返された列データを収集しますか?

DBは、このようなループで一致する値/データを返すのに十分な速度ですか?ループを再度繰り返す前に、返されるデータをなんらかの方法で待機/一時停止/遅延する必要がありますか?

ありがとう!

私が使用/試行している現在の関数:

これは私が現在いるところです:

$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] => sample_source.txt)

HAR IDを取得するファイルの総数:1

すべてのファイルで合計HARSが見つかりました:5 SELECT guar_nu FROMplacements WHERE har_id IN( "108383442"、 "106620416"、 "109570835"、 "109700427"、 "100022236")

配列([0] => sample_source.txt)

HAR IDを取得するファイルの総数:1

すべてのファイルで合計HARSが見つかりました:5 har_idINのプレースメントからguar_nuを選択してください(108383442,106620416,109570835,109700427,100022236)

これをどこに貼り付けて実際に実行するのですか?

ありがとう!

アップデート:

このコードは「OK」で機能しているようですが、リタイアされたデータを正しく処理する方法がわかりません。リスト全体ではなく、最後の変数/行データのみを出力(印刷)しているようです。

$harNumArray2 = implode(',', $harNumArray);
//$harNumArray2 = '"' . implode('","', $harNumArray) . '"';
//$query = "'SELECT guar_num FROM placements WHERE har_id IN ($harNumArray2)'";

$result = mysql_query("SELECT har_id, guar_num FROM placements WHERE har_id IN (" . $harNumArray2 . ")")
//$result = mysql_query("SELECT har_id, guar_num FROM placements WHERE har_id IN (0108383442,0106620416)")
or die(mysql_error());  

// store the record of the "example" table into $row
$row = mysql_fetch_array($result);
$numRows = mysql_num_rows($result);

/*
while($row = @mysql_fetch_assoc($result) ){
    // do something
    echo("something <BR>");
}
*/

// Print out the contents of the entry 
echo("TOTAL ROWS RETURNED : " . $numRows . "<BR>");
echo "HAR ID: ".$row['har_id'];
echo " GUAR ID: ".$row['guar_num'];

この返されたデータを適切に処理するにはどうすればよいですか?

ありがとう!

4

2 に答える 2

0

これがあなたの質問に答えるかどうかはわかりませんが、あなたはサブクエリについて質問していると思います。それらは非常に単純で、次のようになります。

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

これは、その2番目のサブクエリに一意の値が1つある場合にのみ機能します。複数の行を返す場合は、解析エラーを返します。複数の行を選択する必要がある場合は、JOINステートメントを調べてください。これはあなたが始めることができます

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

于 2013-03-19T15:31:06.640 に答える
-1

このような「複数の」検索/選択ステートメントを実行する方法がわかりませんか?

複数選択に関しては(そしてMySQLを使用していると仮定します)、「IN」キーワードを使用して簡単に実行できます。

例えば:

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

編集:質問の更新されたコードに従います。

先に進む前のポイント...新しいコードのPHPのmysql_関数は非推奨になりそうなので、避けるようにしてください。一般的なPHPDBハンドラーPDOまたは新しいmysqli_関数の使用を検討してください。「適切な」APIを選択するための詳細については、こちらをご覧ください。

この返されたデータを適切に処理するにはどうすればよいですか?

複数行のデータ(現在のデータ)を処理するには、ループを使用する必要があります。次のようなものでそれを行う必要があります(そして私の例では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";
  }  

これは非常に基本的な(そしてテストされていない!)コードであり、最小限の手順を示すためだけのものであることに注意してください。:)

于 2013-03-19T15:33:20.837 に答える