2011-07-19 14 views
0

でうまく動作しません:PHP - はstrstr()私は私のDBにこれらのテーブルを持っているのMySQL

表A:

id | haystack 
------------- 
1 | 682,401 
2 | 351 

表B:

id | needle 
------------- 
1 | 352 
2 | 682 
3 | 978 

私が欲しいのテーブルAからの干草がテーブルBの針を含んでいるかどうかを確認することです。私はこのコードをPHPで行いました:

$res_A = mysql_query('SELECT * FROM table_A'); 
while($row_A = mysql_fetch_array($res_A)){ 
    $res_B = mysql_query('SELECT * FROM table_B'); 
    while($row_B = mysql_fetch_array($res_A)){ 
     if(strlen(strstr($row_A['haystack'], $row_B['needle']) > 0)){ 
      echo 'I found this needle: '.$row_B['needle'].' in this haystack: '.$row_A['haystack'].'<br />'; 
     } 
    } 
} 

しかし、動作しません。私は一日中それを理解しようとしましたが、チャンスはありません。私は干し草と針の柱がVarcharsであることを言及する必要があります。

この状況で私を助けることができますか? ありがとうございます!

+0

意味は何を「それは動作しません」ん?何が起こった?あなたは何を期待しましたか? – KingCrunch

+2

1つは、 'strstr'を使うのは良い考えではありません。 (もしneedleに52が入っていてもhaystackに252があるとしたら?)haystackの[explode'](http://php.net/manual/en/function.explode.php)メソッドを使い、[' in_array'](http://us3.php.net/manual/en/function.in-array.php)を針で置き換えてください。 –

+0

table_a.hidstackにtable_b.needleを含むtable_a.idが表示されることを期待していました(私がはっきりしていることを望みます)。はい、strstrは良い考えではないようですので、代わりにsqlを使用しました。はるかに簡単で高速です。 – Cosmi

答えて

1

if(strlen(strstr($row_A['haystack'], $row_B['needle'])) > 0)

通話中> 0を含めている:strlen(strstr($row_A['haystack'], $row_B['needle']) > 0)

てください上のあなたの括弧の配置に注意してください

$res_A = mysql_query('SELECT haystack FROM table_A'); 
while($row_A = mysql_fetch_array($res_A)){ 
    $res_B = mysql_query("SELECT needle FROM table_B WHERE needle = '" . $row_A['haystack'] . "'"); 
    if(mysql_num_rows($res_B) > 0) { 
      echo 'I found this needle: '.$row_B['needle'].' in this haystack: '.$row_A['haystack'].'<br />'; 
    } 
} 
+0

パイと同じように簡単!ありがとう、これは私が必要とする解決策です! – Cosmi

0

この試してみてください。そうしないのはなぜstrlen

+0

'needle'は' haystack'と同じでなければならないという事実のために(あなたは 'LIKE'を使うべきです)、Brad Christieの問題にぶつかります。文字列に 'explode()'を使い、 'in_array()'でチェックしてください。 – Marco

1

をそれをすべてSQLサーバーに保存しますか?はるかに簡単かつ迅速に...

SELECT * from hay, needle WHERE hay.haystack LIKE CONCAT('%',needle.needle,'%');

+0

この回答は、コードの問題点を示しています。しかし、他の多くの人が示唆しているように、処理速度を上げるためにクエリを使用することをお勧めします。 – keithhatfield

関連する問題