2012-12-24 1 views
1

나는 지금이 작업을 시도하고 있으며 그것을 수행하는 방법에 대한 좋은 해결책을 찾을 수 없습니다! Smarty가 나를 위해 일을 더 어렵게 만들고 있습니다! 그럼에도 불구하고 나는 내 모든 프로그래밍이 Smarty에 있기 때문에이를 Smarty에 표시하려고합니다. 나는 원하는 곳과 비슷한 해결책이나 무언가를 찾았지만 아무 것도 찾을 수 없었습니다. 여기서 누군가를 추측하고 있습니다. 원하는 것을 보여 주거나 내가주는 예제에서 작동하는 코드를 줄 수 있습니다. 어쨌든, 제가 가지고 무엇을 보여주지 :이멋지게 multidemisonal sql 코드 excute

{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} 
을 가지고 있다고 할 수있는 TPL 파일에

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 

: (: 장 테이블 이름)

I는 다음과 같습니다 테이블이 현실에서 이런 식으로 표시됩니다

: 나는이처럼 표시 할 방법

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는 다차원 섹션을 사용하는 방법을 모르기 때문에 상황을 더 어렵게 만듭니다! 내 MYSQL 쿼리에 대해 무엇을 넣어야할까요? 그것을 할 수있는 방법이 있어야합니다! 그 다음 나는 나머지를 이해할 수있는 당신이 나에게 soultion을 줄 수있는 경우

$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); 

이, 내가 무엇을 단지 샘플입니다 : 여기에 SQL의 한 Statment 내 PHP 코드입니다.

기본적으로 나는 중복 된 manga_name 결과를 제거하고 manga_name에 속하는 모든 chapter_num을 그 아래에 추가하려고합니다.

답변

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의 기록 보관 및 checkd 현재 이름에 대하여 만 인쇄되어 있습니다 같은.

옵션 1 솔루션. [PHP] 먼저 DB에서 모든 chapter_num을 쉼표로 묶인 단일 문자열로 연결하는 데이터를 가져옵니다.

mysql group_concat

그것이

+0

내가 어떻게하지 않았다 도움이되기를 바랍니다 :

[_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} 

참조 (제대로 직접 DB 테이블에 연결된 문자열로 저장 장을 구현하는 경우 쉽게이 문제를 피할 수) 당신은 두 번째 아이디어를 얻었지만 당신이 매우 지능적인 해결책을 제시했다고 고백해야합니다! 하지만 첫 번째 방법으로 어떻게 할 수 있는지 계속보고 싶습니다. – shnisaka

+1

첫 번째 방법은 더 복잡하지만 개요는 이와 비슷합니다. DB에서 만화 이름을 쿼리하고 하위 쿼리를 사용하여 chapter_nums를 연결하여 각 manga_name 아래에있는 모든 chapter_num을 가져옵니다. :: PHP에서는 해당 문자열을 동일한 구분 기호 [:]로 분해하여에 대한 배열을 생성합니다. 각 manga_name. 당신이 내가 말하려고하는 것을 얻기를 바랍니다. 그렇지 않다면 나는 블로그를 써서 당신을 가리킬 수 있습니다. – shawndreck

+0

참고 자료 나 사례가 있다면 정말 도움이 될 것입니다. 나는 네가 한 말을 안다. 그러나 나는 그것을 어떻게하는지 모른다. PHP에서 무엇을 넣어야할지 .tpl 파일에 넣어야 할 것 .. 등등. – shnisaka