我对php有“无意义”的问题。第一个循环应该从表中获取某个记录,并将其与第二个表中的所有记录进行比较......
所以我希望它能在每个“1st”之后打印41“2nd”。由于第二张表中有41条记录。但是,while循环第一次工作,然后忽略第二个while循环。
我得到的结果:
1st2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd1st1st1st1st1st1st1st1st1st1st1st1st1st1st1st1st1st1st1st1st1st1st1st1st1 ...
while($row = mysql_fetch_array($select))
{
echo "1st";
while($row2 = mysql_fetch_array($select2))
{
echo "2nd";
$string = $row2["header"];
$find = $row["email"];
if(strstr($string, $find)) {
$email = $row["email"];
echo "found it";
} else {
//no email found
}
}
}
答案 0 :(得分:1)
您需要在进入内循环之前执行第二个查询:
while($row=mysql_fetch_array($select)) { echo "1st"; $select2 = mysql_query("select ..."); while($row2=mysql_fetch_array($select2)) {
最好是在开始第一个循环之前运行第二个查询,并将记录保存到另一个数组。然后你可以避免n ^ 2个查询:
$emailToRecord = array(); $select2 = mysql_query("select ..."); while($row2=mysql_fetch_array($select2)) { $emailToRecord[$row2["header"]] = $row2; } while($row=mysql_fetch_array($select)) { echo "1st"; $find = $row["email"]; if (isset($emailToRecord[$find])) { echo "found it"; } }
答案 1 :(得分:0)
除非两个查询中的行数相同,否则不会发布相同的行。
你可以添加查询($ select和$ select2)吗?
有人可以告诉我如何发表评论而不是答案吗?
<?php
$select=mysql_query("SELECT email FROM database.tablename");
$select2=mysql_query("SELECT header FROM database2.tablename2");
while($row=mysql_fetch_assoc($select))
{
echo "1st";
$find = $row["email"];
while($row2=mysql_fetch_assoc($select2))
{
echo "2nd";
$string = $row2["header"];
if(strstr($string, $find))
{
$email=$find;
echo "found it";
}
else
{
//no email found
}
}
}
答案 2 :(得分:0)
我希望这是有道理的。
这是因为第一个while执行然后第二个while循环并且直到它完成才结束,然后它结束并返回到第一个while而它返回true(另一行)并执行并转到下一个while ,但它指向当前“行”的指针已到达结尾,因此它不会执行,它主要只是主循环。这就是为什么你得到122222221111111
答案 3 :(得分:0)
不要在另一个while循环中运行mysql_fetch_array
。首先提取所有数据并比较两个表的结果。
$select=mysql_query("SELECT email FROM database.tablename");
$select2=mysql_query("SELECT header FROM database2.tablename2");
while($row=mysql_fetch_array($select)) {
$first[] = $row["email"];
}
while($row2=mysql_fetch_array($select2)) {
$second[] = $row2["header"];
}
foreach ($first as $item) {
if (($key = array_search($item, $second)) !== false) {
$email[] = $second[$key];
}
}
print_r($email); // Get all the emails that exist in both tables.