I have these tables in my DB:
TABLE A:
id | haystack
-------------
1 | 682,401
2 | 351
TABLE B:
id | needle
-------------
1 | 352
2 | 682
3 | 978
All I want to do is to check if a haystack from table A contain any needle from table B. I did this code in 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 />';
}
}
}
But, it doesn't work. I tried to figure it out all day, but no chance. I need to mention that the haystack and needle columns are Varchars.
Can you help me with this situation? Thanks in advance!
Why don't you keep it all on the SQL server? Much easier and faster..
SELECT * from hay, needle WHERE hay.haystack LIKE CONCAT('%',needle.needle,'%');
Try this:
$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 />';
}
}
Notice your Parenthesis placement on strlen(strstr($row_A['haystack'], $row_B['needle']) > 0)
Try: if(strlen(strstr($row_A['haystack'], $row_B['needle'])) > 0)
You are including the > 0
in the call to strlen