代码之家  ›  专栏  ›  技术社区  ›  W R

模板工具包显示唯一行

  •  8
  • W R  · 技术社区  · 7 年前

    我正在使用Perl dancer2编写一个应用程序。在mysql中运行select query会显示所有记录。但在dancer2和template toolkit中运行的相同查询只显示唯一的记录。

        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_列表。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 回复  |  直到 7 年前
        1
  •  9
  •   simbabque    7 年前

    请注意: fetchall_hashref 返回hashref{FieldValue=>FieldsHash}。

    当某些字段值不唯一时,您会错过一些FieldHash(具有相同时间值的下一条记录将覆盖结果hashref中的上一条记录)。

    请使用行数组( selectall_arrayref