模板工具包显示唯一行

时间:2017-09-17 15:31:57

标签: mysql perl template-toolkit dancer

我正在使用Perl dancer2来编写应用程序。在mysql中运行select查询显示所有记录。但是,在dancer2和模板工具包中运行的相同查询仅显示唯一记录。

EG。在mysql客户端中运行时获取的34条记录。

    select timing.time as Time,
           church.church_name as Church_Name, 
           church.church_address as Address, 
           language.language_name as Language, 
           denomination.denomination_name as Denomination, 
           city.city_name as City, 
           state.state_name as State, 
           country.country_name as Country 
      from church 
      join country on church.church_countryid=country_id 
      join state on church.church_stateid=state.state_id 
      join city on church.church_cityid=city.city_id 
      join church_mass_timing on church.church_id=church_mass_timing.church_id 
      join timing on church_mass_timing.time_id=timing.time_id 
      join language on church_mass_timing.language_id=language.language_id 
      join denomination on church.church_denominationid=denomination.denomination_id 
  order by church.church_name,
           timing.time;

Dancer with Template Toolkit中的相同查询返回11条记录。

get '/church_list' => sub {
my $db = connect_db();
my $sql='select timing.time as Time,
                church.church_name as Church_Name, 
                church.church_address as Address, 
                language.language_name as Language, 
                denomination.denomination_name as Denomination, 
                city.city_name as City, 
                state.state_name as State, 
                country.country_name as Country 
           from church 
           join country on church.church_countryid=country_id 
           join state on church.church_stateid=state.state_id 
           join city on church.church_cityid=city.city_id 
           join church_mass_timing on church.church_id=church_mass_timing.church_id 
           join timing on church_mass_timing.time_id=timing.time_id 
           join language on church_mass_timing.language_id=language.language_id 
           join denomination on church.church_denominationid=denomination.denomination_id 
       order by church.church_name,
                timing.time';
my $sth = $db->prepare($sql) or die $db->errstr;
$sth->execute or die $sth->errstr;
template 'church_list.tt' => { 'title' => 'church list',
   'site' => 'Church Timings', 
   'entries' => $sth->fetchall_hashref('Time'),
};
};    

这是church_list.tt

<% INCLUDE header.tt %>
<ul id="content">
<button id="btnExport">Export to xls</button>
<br />
<br />
<div id="table_wrapper">

<% IF entries.size %>
<table border="1" cellspacing="2" widht="100%">
<tr>
<th><center>Time</center></th>
<th><center>Church name</center></th>
<th><center>Address</center></th>
<th><center>Language</center></th>
<th><center>Denomination</center></th>  
<th><center>City</center></th>
<th><center>State</center></th>
<th><center>Country</center></th>
</tr>
<% FOREACH id IN entries.keys %>
<tr>
<td><% entries.$id.Time %></td>
<td><% entries.$id.Church_Name %></td>
<td><% entries.$id.Address %></td>
<td><% entries.$id.language %></td>
<td><% entries.$id.denomination %></td>
<td><% entries.$id.city %></td>
<td><% entries.$id.state %></td>
<td><% entries.$id.country %></td>
</tr>
<% END %>
</table>
</div>
<% ELSE %>
<li><em>No entries here so far.</em>
<% END %>
</ul>

感谢。

1 个答案:

答案 0 :(得分:9)

请注意fetchall_hashref返回hashref {FieldValue =&gt; FieldsHash}。

当某些字段值不唯一时,您错过了一些FieldHashes(具有相同Time值的每个下一条记录都将覆盖结果hashref中的前一个)。

在这些情况下,请使用行数组(selectall_arrayref)。

P.S。:此查询中的时间始终不是唯一的(有时可能同时添加两条记录)。