0

DB に次のテーブルがあります。

表 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 であることに言及する必要があります。

この状況で私を助けてもらえますか?前もって感謝します!

4

3 に答える 3

1

括弧の配置に注意してくださいstrlen(strstr($row_A['haystack'], $row_B['needle']) > 0)

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

あなたは> 0への呼び出しに含まれていますstrlen

于 2011-07-19T13:58:53.623 に答える
1

すべてを SQL サーバーに保管してみませんか? はるかに簡単で高速..

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

于 2011-07-19T14:01:09.537 に答える
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 />';
    }
}
于 2011-07-19T13:57:53.593 に答える