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

我可以为你想两个选择。一种是格式化查询结果,使章节按manga_name 分组。下一步将是使用 mysql 中的存储过程来生成格式化的查询结果。或者,您可以使用我所说的先前/当前检查来跳过循环中的相同漫画名称。

这是第二个选项的原始未经测试的示例代码

{$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] 首先让我们从 DB 中获取数据,将所有 chapter_num(s) 连接成一个用逗号连接的字符串。(如果您正确地将章节存储为直接在数据库表中的串联字符串,您可以轻松避免此麻烦)

[_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 回答