3

以下のコードは私の mysql データベースを検索し、ストアド プロシージャを使用して IG6、RM11、RM8、RM4、RM2、RM6、RM7、RM1、RM5 のような郵便番号と距離を返します。(大丈夫)

問題: これらの結果を使用して、同じデータベース内の別のテーブルを検索したいと思います。このテーブルには、これらの郵便番号 (おそらく を使用) を持つ求人情報が含まれている可能性がありますLIKE

これを機能させる最良の方法は何ですか?多くの例を試しました ( implodearraysなど) データベースへの 1 つの接続は正しいですか? 郵便番号と距離の 2 つの列が返されるため、変数をクエリするにはどうすればよいですか。配列に分割する必要があります (どのように?)

最終製品: HGV ドライバー RM5、クリーナー RM5、ティーチャー RM5

( SELECT title FROM jobinfo WHERE location IN results from other query);

 <?php
    include ("conn.php");
    $first="RM5";

    $result = mysql_query("select outcode, GetDistance(Lat, Lon, (SELECT Lat from postcodes where outcode = '$first' limit 1),(SELECT Lon from postcodes where outcode = '$first' limit 1)) as Distance from postcodes having Distance < 3 order by Distance DESC;");
    while($row = mysql_fetch_array($result))
    {
        echo  ($row['outcode']) ;
    } 
    // This returns postcodes

    $resultb = mysql_query("SELECT title FROM jobinfo WHERE location IN ($results[outcode]) ");
    while($row = mysql_fetch_array($resultb))
    {
        echo  ($row['title']) ;
    }
    mysql_close($con);
?> 

助けてください...結合テーブルへの参照には、これまでのところ役に立たないため、完全な説明が必要です!

4

2 に答える 2

1

最初に出力を句に準備します。

最初の while ループで:

while($row = mysql_fetch_array($result))
 {
    $array[] = $row['outcode'] ;
 } 

次に、IN 句の配列を準備します。

foreach ($array as $a) {$clause.= "'$a',";}
$clause=substr($clause,0,-1)

最後に、IN ステートメントの句を使用します。

$resultb = mysql_query("SELECT title FROM jobinfo WHERE location IN ($clause) "

===== 編集 === LIKE ステートメント

ORlike.. 複数の like ステートメントが一緒に必要な場合.. SQL LIKE と IN を一緒に使用する

prepare 句のコードを次のように変更します。

foreach ($array as $a) {$clause.= " location LIKE '%$a%' OR";}
$clause=substr($clause,0,-3)

AND SQL は次のようになります。

$resultb = mysql_query("SELECT title FROM jobinfo WHERE $clause ");

もちろん、さらにエラーチェックを追加したいと思うでしょう..可能なインジェクションを考えてください。

于 2012-09-26T22:07:39.400 に答える
0

私はあなたがこの答えのような何かをしようとしていると思いますMySQLLIKEIN()?

また、パラメータ化されたクエリを使用してくださいPHPでSQLインジェクションを防ぐにはどうすればよいですか?

于 2012-09-26T22:34:12.910 に答える