繁体   English   中英

PHP:在MySQL的数据数组中保存两个匹配项

[英]PHP: Holding two matching items in an array of data from MySQL

$story_query = "SELECT table_name, id FROM planning WHERE parent = '$novelnum'";
$story_result = db_query($story_query);
while($story_row = db_fetch_array($story_result)) {
    $taleTable_Name = $story_row['table_name'];
    $postid[] = $story_row['id'];

    $q2 = "Select * from $taleTable_Name where approved='Y' order by id";
    $bset2 = db_query($q2);
    while($rset2 = db_fetch_array($bset2)) {
        $i[] = $rset2['id'];
        $t[] = $rset2['thread'];
        $s[] = $rset2['subject'];
        $a[] = $rset2['author'];
        $d[] = $rset2['datestamp'];

    }
}

if(isset($d)) {
    $fc = count($d);
    if($fc > 20) {
        $xs = $fc - 20;
    }
    else {
        $xs = 0;
    }

    for($c=$xs;$c<$fc;$c++) {
        if($s[$c] != "") {
            $newpost .= $d[$c];
            $newpost .= " <a href='../forums/read.php?f=";
            $newpost .= end($postid);
            $newpost .= "&i=";
            $newpost .= $i[$c];
            $newpost .= "&t=";
            $newpost .= $t[$c];
            $newpost .= "'>" ;
            $newpost .= $s[$c];
            $newpost .= "</a> by "; 
            $newpost .= $a[$c];
            $newpost .= $taleTable_Name;
            $newpost .= "<br>\n";
        }
    }
}
else {
    $newpost = "There are no posts for this scroll yet.";
}

上面的代码正确地向我展示了用$ taleTable_Name找到的所有条目,但是在我打印$ newpost时仅展示了$ postid的最后一个变量。 我想要id($ postid与table_name($ taleTable_Name)匹配,以便创建的URL实际进入正确的论坛。

首先,我不知道您的变量名是什么意思。 我试过猜测,但是您应该考虑重命名它们。 为了保持您的维护程序员的健康。

查看您的代码,我知道它在做什么,但是我不知道它应该做什么,或者为什么。 下面是重命名变量名的尝试,但是我不知道它是正确的还是接近正确的:


$story_query = "SELECT table_name, id FROM planning WHERE parent = '$novelnum'";
$story_result = db_query($story_query);
while($story_row = db_fetch_array($story_result)) {
    $taleTable_Name = $story_row['table_name'];
    $postid[] = $story_row['id'];

    $query2 = "Select * from $taleTable_Name where approved='Y' order by id";
    $bset2 = db_query($query2);
    while($rowset2 = db_fetch_array($bset2)) {
        $id[] = $rowset2['id'];
        $thread[] = $rowset2['thread'];
        $subject[] = $rowset2['subject'];
        $author[] = $rowset2['author'];
        $datetime[] = $rowset2['datestamp'];

    }
}

if(isset($datetime)) {
    $forumcount = count($datetime);
    if($forumcount > 20) {
        $xs = $forumcount - 20;
    }
    else {
        $xs = 0;
    }

    for($postnum=$xs;$postnum<$forumcount;$postnum++) {
        if($subject[$postnum] != "") {
            $newpost .= $datetime[$postnum];
            $newpost .= " <a href='../forums/read.php?f=";
            $newpost .= end($postid);
            $newpost .= "&id=";
            $newpost .= $id[$postnum];
            $newpost .= "&thread=";
            $newpost .= $thread[$postnum];
            $newpost .= "'>" ;
            $newpost .= $subject[$postnum];
            $newpost .= "</a> by "; 
            $newpost .= $author[$postnum];
            $newpost .= $taleTable_Name;
            $newpost .= "<br>\n";
        }
    }
}
else {
    $newpost = "There are no posts for this scroll yet.";
}

以下变量是什么意思? $xs$c&i&t$fc 这些应该是有意义的名称。 我已经重命名了您的其他变量,但是我只是猜到了这些。 我可能会离开。 有意义的变量名在帮助他人阅读没有注释的代码方面大有帮助。 照原样,如果您有有意义的变量名, 我可能不需要注释 -尽管'20'的神奇数字在做什么? 这个数字有什么意义呢?

我注意到您的代码的一件事是,没有在哪里打印$ newpost。 在for循环结束之前,需要使用$ newpost完成一些操作。 在这种情况下,您只是每次都丢弃结果(或更准确地说,是将其覆盖)。 您需要使用$ newpost做一些事情(打印它,将它存储在另一个值中,然后将其发送回浏览器,等等)。

怎么样 ?

unset($post); // ensure start afresh

$story_query = "SELECT table_name, id FROM planning WHERE parent = '$novelnum'";
$story_result = db_query($story_query);
while($story_row = db_fetch_array($story_result)) {
    $taleTable_Name = $story_row['table_name'];
    $postid         = $story_row['id'];

    $q2 = "Select * from $taleTable_Name where approved='Y' order by id";
    $bset2 = db_query($q2);
    while($rset2 = db_fetch_array($bset2)) {
        $post[$postid] = $rset2;
    }
}

if(isset($post)) {
    /***
     * Page control here    
     ****/

    foreach($post as $id => $msg) {
        if($row['subject'] != "") {
            $newpost .= $msg['datestamp'];
            $newpost .= " <a href='../forums/read.php?f=";
            $newpost .= $id;
            $newpost .= "&i=".$msg['id'];
            $newpost .= "&t=".$msg['thread'];
            $newpost .= "'>" ;
            $newpost .= $msg['subject'];
            $newpost .= "</a> by "; 
            $newpost .= $msg['author'];
            $newpost .= $taleTable_Name;
            $newpost .= "<br>\n";
        }
    }
}
else {
    $newpost = "There are no posts for this scroll yet.";
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM