您好,并提前感谢能够回答我问题的任何人。我在PHP方面仍然有点绿,但我会尝试解释我想要的和我的问题。
我有3个带有MySQL查询结果的数组:
我希望最终输出为
<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]."%'";
答案 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]."%'";