-2

こんにちは。私の質問に答えてくれる人に感謝します。私はまだPHPに関して少し緑ですが、何が欲しいのか、何が問題なのかを説明しようと思います。

MySQL クエリの結果を含む 3 つの配列があります。

  • $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

0

のすべてのエントリを反復処理するため、コードはあまり意味がありません$resultsTextPageIDが、最初のエントリですべてを反復処理します$resultsTextPageName。したがって、resultsTextPageID-loop の本体を 2 回目に入力すると、そこからフェッチする必要がなくなります$resultsTextPageName。これは、2 番目/3 番目の while ループとまったく同じ方法で発生します。

タイトルが 1 つだけで、ページのイントロが 1 つしかないと仮定すると、コードを次のように変更できます。

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 に答える