2012-02-18 2 views
2

このquestion上に次の結果。のMySQL:マルチ行のセットに基づくアプローチVS標準的なアプローチは、以下の場合に<strong>標準アプローチ</strong>又は<strong>再帰アプローチ</strong>に問題がある、

は例えば、私は同じparent_idでページを返すようにしたいといくつかのページが複数行の内容

pageテーブル

page_id page_title parent_id 
1   a   1 
2   aa   1 
3   ab   1 
4   ac   1 

contentテーブルを持っている

content_id content_text 
1   text one 
2   text two 
3   text one aa 
4   text two aa 
5   text one ab 
6   text one ac 

content structureテーブル

page_id  content_id  order_in_page 
1   1    1 
1   2    2 
2   3    1 
2   4    2 
3   5    1 
4   6    1 

標準的なアプローチ、

SELECT 
    p.*, 
    c.*, 
    x.* 

FROM pages AS p 

LEFT JOIN pages_structures AS x 
ON x.page_id = p.page_id 

LEFT JOIN pages_contents AS c 
ON c.content_id = x.content_id 

WHERE p.parent_id = '1' 
AND p.page_id != '1' 

結果(それは4つの項目として行を示しています)、

page_id page_title parent_id content_text order_in_page 
2   aa   1   text one aa  1  
2   aa   1   text two aa  2 
3   ab   1   text one ab  1 
4   ac   1   text one ac  1   

もし二列page_id 2があることに気づくことができるように1つの列はそれぞれ34です。 標準アプローチ(前のquestionの回答の1つに示唆されているように)のように、データをHTMLにどのように表示しますか?

echo $page[0]['page_title']; 
echo $page[0]['content_text']; 

しかしセットベースの 1で、私は、これをPHPで

SELECT 
    page_id, 
    page_title, 
    MAX(IF(order_in_page = 1, content_text, NULL)) AS content_1, 
    MAX(IF(order_in_page = 2, content_text, NULL)) AS content_2, 
    . 
    . 
    . 
FROM 
    pages AS p LEFT JOIN 
    pages_structures AS x ON x.page_id = p.page_id LEFT JOIN 
    pages_contents AS c ON c.content_id = x.content_id 
WHERE 
    p.parent_id = '1' 
AND 
    p.page_id != '1' 
GROUP BY page_id 

をそれを行うことができ、

foreach($items as $item) 
{ 
    echo '<li><h3>'.$item['page_title'].'</h3>'; 
    echo '<p>'.$item['content_1'].'</p>'; 
    echo '<p>'.$item['content_2'].'</p></li>'; 
} 

HTML(それは3つの項目として行を示しています正しいですか?)、

<li> 
    <h3>aa</h3> 
    <p>text one aa</p> 
    <p>text two aa</p> 
</li> 

<li> 
    <h3>ab</h3> 
    <p>text one ab</p> 
    <p></p> 
</li> 

<li> 
    <h3>ac</h3> 
    <p>text one ac</p> 
    <p></p> 
</li> 

これは理にかなっていますように!

答えて

0

標準アプローチでは、変数の現在のページを追跡し、ページが変更されたときに新しいリスト項目に移動します。

関連する問題