1

私は何年もの間これをやろうとしてきましたが、それを行う方法について良い解決策を見つけることができませんでした! Smarty は私にとって物事を困難にしています! それでも、私のプログラミングはすべて Smarty にあるので、Smarty で表示したいと思います。私はどこでも解決策や私が望むものに似たものを探しましたが、何も見つかりませんでした. とにかく、私が持っているものをお見せしましょう:

次のようなテーブルがあります (テーブル名: 章):

date_add    manga_name  manga_title chapter_num 
12/23/2012  One Piece      OnePiece    002
12/23/2012  One Piece      OnePiece    003
12/22/2012  Naruto         Naru        002

tplファイルで、私はこれを持っていると言いましょう

{section name=chp loop=$chpt}   

{$chpt[chp].date_add}
{$chpt[chp].manga_name}</a>
<a href="{$chpt[chp].manga_title}/{$chpt[chp].chapter_num} ">{"%03d"|sprintf:$chpt[chp].chapter_num} </a>

{/section}

これは、実際には次のように表示されます。

12/23/2012  One Piece  [0002][withURL]
12/23/2012  One Piece  [0003][withURL]
12/22/2012  Naruto [0002][withURL]

私がそれをどのように示したいかは次のようになります:

One Piece :
0002[withURL] 12/23/2012
0003[withURL] 12/23/2012
Naruto : 
0002[withURL] 12/22/2012

私はそれを実行するために多くの方法を試しましたが失敗しました! 私はいくつかの例を探しましたが、何も見つかりませんでした! 私が必要としているのは、私のものに似た例と、smarty でそれを行う方法です! 多次元セクションの使い方がわからないので、Smarty は物事を難しくしています。私のMYSQLクエリに何を入れるか!それを行う方法があるはずです!SQLステートメントを含む私のPHPコードは次のとおりです。

$chapter = $db->query("SELECT  date_add,  manga_name, manga_title, chapter_num FROM chapter ORDER BY ch_Id DESC Limit 0,6");
while($chpt = $db->fetch_array($chapter))
{$chps[] = $chpt;}
$smarty->assign('chpt' , $chps);

これは私が持っているもののほんの一例です。あなたが私に魂を与えてくれれば、残りは理解できます。

基本的に、重複した manga_name の結果を削除し、その下の manga_name に属するすべての chapter_num を追加したいと考えています。

4

1 に答える 1

1

私はあなたのために2つのオプションを考えることができます。1つは、チャプターがmanga_nameでグループ化されるように、クエリ結果をフォーマットすることです。次のステップは、mysqlのストアドプロシージャを使用して、フォーマットされたクエリ結果を生成することです。または、私が以前/現在のチェックと呼んでいるものを使用して、ループ内の同じマンガ名をスキップすることができます。

これは、2番目のオプションの未テストのサンプルコードです。

{$prevMangaName = ''}
{foreach $chapters as $chapter}
    {if $chapter.manga_name != $prevMangaName}
        {$chapter.manga_name|capitalize}:<br>
    {/if}        
    {$chapter.chapter_num}[withURL] {$chapter.date_add}[withURL]<br>
    {$prevMangaName = $chapter.manga_name}
{/foreach}

ここで起こっていることは、前のmanga_nameの記録が保持され、現在の名前と照合され、同じでない場合にのみ印刷されるということです。

オプション1ソリューション。[PHP]最初に、すべてのchapter_numをコンマで結合された単一の文字列に連結するDBからデータを取得します。(チャプターを連結文字列としてDBテーブルに直接格納することを適切に実装すれば、この問題を簡単に回避できます)

[_PSEUDO_CODE_ SOMEWHERE IN YOUR PHP]
$chapters = $db->query("select manga_name,group_concat(chapter_num separator ',') as chapter_numbers from chapter");

[SOMEWHERE IN YOUR TEMPLATE FILE]
// convert the chapter_numbers string into array, loop over and print results
{foreach $chapters as $chapterRow}
    {$chapterRow.manga_name|capitalize}:<br>
    {$chapterNumberArray = $chapterRow.chapter_numbers|explode:','}
    {foreach $chapterNumberArray as $chapterNumber}
        {$chaperNumber}[withURL] {$chapterRow.date_add}[withURL]<br>
    {/foreach}
{/foreach}

参照:

mysql group_concat

それが役に立てば幸い

于 2012-12-24T04:27:18.397 に答える