以正确的格式显示3个阵列的数据

时间:2013-06-12 11:55:56

标签: php

您好,并提前感谢能够回答我问题的任何人。我在PHP方面仍然有点绿,但我会尝试解释我想要的和我的问题。

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

  • $ resultsTextPageID(pageID value [int(10)])
  • $ resultsTextPageName(pageName value [text])
  • $ resultsTextIntro(with pageIntro value [text])

我希望最终输出为

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

像这样:

[页面名]
    [pageIntro]

[页面名]
    [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 />';
        }
    }
}

但我得到的输出是:

[页面名]
    [pageIntro]

    [pageIntro]

[页面名]

我认为问题在于我构建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]."%'";

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

您的代码没有多大意义,因为您遍历$resultsTextPageID的每个条目,但已经遍历所有$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代码:
您在相同条件下从同一个数据库中选择3次,仅检索不同的列,将其更改为

$searchTextPageID = "SELECT pageIDm, pageName, pageIntro FROM pages WHERE pageIntro LIKE '%".$keywords[$i]."%' OR pageText LIKE '%".$keywords[$i]."%'";