在smarty中执行多维sql代码

时间:2012-12-24 03:12:05

标签: php mysql smarty

我多年来一直试图这样做,我找不到如何做到这一点的好方法! 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查询提供什么!必须有办法做到这一点!这是我的PHP代码与SQL语句:

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

1 个答案:

答案 0 :(得分: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连接成一个用逗号连接的单个字符串。 (如果您在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

希望有所帮助