2011-06-22 23 views
-1

カテゴリとトピックという2つのテーブルがあります。PHP MySQLの1回表示

カテゴリには、category_idとcategory_titleの列があります。トピックには、topic_id、topic_title、およびcategory_idの列があります。

私は現在、そうのような列を表示:

カテゴリー1 カテゴリー1 カテゴリー2

トピック1つの トピック2 トピック3

$result = mysqli_query($db_server, 'SELECT c.category_title, t.topic_title FROM categories c JOIN topics t on c.category_id = t.category_id'); 

while ($row = mysqli_fetch_array($result)) 
{ 
$category_title[] = $row['category_title']; 
$topic_title[] = $row['topic_title']; 
} 

<?php 

foreach ($category_title as $category_title): 

echo htmlspecialchars($category_title, ENT_QUOTES, 'UTF-8');?><br /> 

<?php endforeach; ?> 

<?php 

foreach ($topic_title as $topic_title): 

echo htmlspecialchars($topic_title, ENT_QUOTES, 'UTF-8');?><br /> 

<?php endforeach; ?> 

これはと表示されます

トピック1と2はカテゴリ1に割り当てられ、トピック2はカテゴリ1に割り当てられます。

カテゴリー1 カテゴリー2

トピック1 トピック2 :PIC 3は、複数のトピックのような、そこにそこに割り当てている場合はどのように私は一度のカテゴリ表示を持つことができます。2.

カテゴリーに割り当てるですトピック3

クラスとオブジェクトの例はありません。私はまだそれを学んでいないよ。

答えて

0

あなたは以下のようにカテゴリに応じて選択したトピックに新しいクエリを実行し、その後カテゴリの最初のクエリ2時間を実行することができます:

私の頭がテストされていません償却
<?php 
$result = mysqli_query($db_server, 'SELECT c.category_id,c.category_title FROM categories as c'); 
    $recordArray=array(); 
    while ($row = mysqli_fetch_array($result)) 
    { 
    $category_id = $row['category_id']; 
    $recordArray[$category_id] = $row['category_title']; 
    //Query For Topic 
    $getTopic = mysqli_query($db_server, "SELECT t.topic_title FROM topics as t WHERE t.category_id='".$category_id."'"); 
    while ($getRow = mysqli_fetch_array($getTopic)) 
    { 
     $recordArray[$category_id]['topic'][] = $getRow['topic_title']; 
    } 

} 
print"<pre>"; 
print_r($recordArray); 
?> 
+0

ありがとう!これは私が探しているものに最も近いものです。 print_rを使用して配列を印刷しないところで変更しなければなりませんでした。私はちょうどcateory_titleとtopic_titleをエコーし​​たかった。 – markerpower

0

あなたは文の "BY GROUP" の追加あなたのSQLクエリを変更することができます。

SELECT c.category_title, t.topic_title FROM categories c JOIN topics t on c.category_id = t.category_id GROUP BY c.category_id 

あなたはGROUP BYを使用してのhere明確な例を見つけることができます:それはようなものになるだろう。

+0

GROUP BYはトピックを一度表示します。だから私は結果を得る:カテゴリ1カテゴリ2 トピック1トピック3 – markerpower

+0

@markerpowerああ、申し訳ありません、あなたは正しいです。 :)あなたの解決策を見つけてうれしい;) – dave

0


最初にあなたがいない理由を私は知りません1つのループの内側にそれを使用し、それはより速く実行されますが、それは

$result = mysqli_query($db_server, 'SELECT c.category_title, t.topic_title FROM categories c JOIN topics t on c.category_id = t.category_id'); 
$oldCategory=''; 
while ($row = mysqli_fetch_array($result)) { 
    if ($oldCategory!=$row['category_title']) { 
     echo htmlspecialchars($row['category_title'], ENT_QUOTES, 'UTF-8').'<br />'; 
     $oldCategory=$row['category_title']; 
     } 
    echo htmlspecialchars($row['topic_title'], ENT_QUOTES, 'UTF-8').'<br />'; 
    } 

またはこの出力をスワップする出力をスワップしません。

$result = mysqli_query($db_server, 'SELECT c.category_title, t.topic_title FROM categories c JOIN topics t on c.category_id = t.category_id'); 
$oldCategory=''; 
$catStr=''; 
$topStr=''; 
while ($row = mysqli_fetch_array($result)) { 
    if ($oldCategory!=$row['category_title']) { 
     $catStr.=htmlspecialchars($row['category_title'], ENT_QUOTES,'UTF-8').'<br />'; 
     $oldCategory=$row['category_title']; 
     } 
    $topStr.=htmlspecialchars($row['topic_title'], ENT_QUOTES, 'UTF-8').'<br />'; 
    } 
echo $catStr.$topStr; 
+0

私がこのトピックを投稿する前に、私はこれらの例を紹介しました。何らかの理由で、同じカテゴリが複数回表示される場合でも同じ問題が発生します。 – markerpower

関連する問題