-2

您好,提前感谢任何可以回答我问题的人。就 PHP 而言,我仍然有点绿色,但我会尝试解释我想要什么以及我的问题是什么。

我有 3 个带有 MySQL 查询结果的数组:

  • $resultsTextPageID(pageID 值为 [int(10)])
  • $resultsTextPageName(具有 pageName 值 [文本])
  • $resultsTextIntro(带有 pageIntro 值 [文本])

我希望最终输出是

<b><a href="page.php?id=[pageID goes here]">[pageName goes here]</a></b><br />
[pageIntro goes here]<br /><br />

像这样:

[pageName]
[pageIntro]

[pageName]
[pageIntro]

我尝试了以下代码:

//ECHO PAGEID PART
while ($pageID = mysql_fetch_assoc($resultsTextPageID))
{
    echo '<b><a href="page.php?id='.$pageID['pageID'].'">';
    //ECHO PAGENAME PART
    while ($pageName = mysql_fetch_assoc($resultsTextPageName))
    {
        echo $pageName['pageName'].'</a></b><br />';
        //ECHO PAGEINTRO PART
        while ($intro = mysql_fetch_assoc($resultsTextIntro))
        {
            echo $intro['pageIntro'].'<br /><br />';
        }
    }
}

但我得到的输出是:

[pageName]
[pageIntro]

[pageIntro]

[pageName]

我认为问题出在我构建while循环的方式上,但对于我的生活,我无法弄清楚如何解决它。

有人能帮我吗?再次,提前感谢!:D

编辑1:这是查询代码:

//Prepare and set search query string
$q = preg_replace("/[^a-zA-Z0-9 !?.:]+/", " ", $_GET['q']);
//RETRIEVE KEYWORDS
//seperate multiple keywords into array
$keywords = explode(" ", $q);
//Clean empty arrays so they don’t get every row as result
$keywords = array_diff($keywords, array(""));
//MySQL QUERY
$searchTextPageID = "SELECT pageID FROM pages WHERE pageIntro LIKE '%".$keywords[$i]."%' OR pageText LIKE '%".$keywords[$i]."%'";
$searchTextPageName = "SELECT pageName FROM pages WHERE pageIntro LIKE '%".$keywords[$i]."%' OR pageText LIKE '%".$keywords[$i]."%'";
$searchTextIntro = "SELECT pageIntro FROM pages WHERE pageIntro LIKE '%".$keywords[$i]."%' OR pageText LIKE '%".$keywords[$i]."%'";
4

2 回答 2

1

本质上,您应该一次收集所有 3 条信息,如果它们都在同一张表中,那么这项工作很容易。

$qry = "select pageID, pageName, pageIntro from <your table name>";

// now loop thru results
while ($page = mysql_fetch_assoc($qry))
{
echo '<b><a href="page.php?id='.$page['pageID'].'">';
echo $page['pageName'].'</a></b><p>';
echo $page['pageIntro'].'<br /></p>';

}

如果数据分布在多个表中,则必须在 sql 中执行 JOIN。

于 2013-06-12T12:04:19.330 回答
0

您的代码没有多大意义,因为您遍历了 的每个条目,$resultsTextPageID但已经在您遍历 all 的第一个条目中$resultsTextPageName。因此,当您第二次进入 resultsTextPageID-loop 的主体时,就不再需要从$resultsTextPageName. 这与第二个/第三个 while 循环完全相同。

假设您只有一个标题和一页介绍,您可以将代码更改为

while ($pageID = mysql_fetch_assoc($resultsTextPageID))
{
  /* get only ONE entry */
  $pageName = mysql_fetch_assoc($resultsTextPageName);
  $intro = mysql_fetch_assoc($resultsTextIntro);

  echo '<b><a href="page.php?id='.$pageID['pageID'].'">';
  echo $pageName['pageName'].'</a></b><br />';
  echo $intro['pageIntro'].'<br /><br />';
}

但这绝不是好的代码。
您应该查看 mysql JOIN 命令以在数据库选择中正确排列数据。然后你的输出代码会容易得多。

编辑因为您添加了 mysql-code:
您在相同条件下从同一个数据库中选择 3 次,只是为了检索不同的列,将其更改为

$searchTextPageID = "SELECT pageIDm, pageName, pageIntro FROM pages WHERE pageIntro LIKE '%".$keywords[$i]."%' OR pageText LIKE '%".$keywords[$i]."%'";
于 2013-06-12T12:04:34.283 回答