2017-09-17 20 views
8

Bir uygulama yazmak için Perl dancer2 kullanıyorum. Mysql'de seçme sorgusunu çalıştırmak tüm kayıtları görüntüler. Ancak dancer2 ve template toolkit'te aynı sorgulama çalışması sadece benzersiz kayıtları gösterir.template toolkit benzersiz bir satır görüntüler

Ör. Bu mysql istemcide çalıştırıldığında getirilen 34 kayıtları.

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; 

Şablon Toolkit ile Dansçı'da aynı sorgu 11 kayıt döndürür.

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'), 
}; 
};  

bu

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> 

teşekkürler olduğunu.

+0

"PRI" nedir? Bu ada sahip bir sütun yok ve DBI dokümanları bunu özel bir durum olarak belirtmiyor. Ayrıca bir sayı gibi ele alınamaz, bu yüzden bir hata atmalıdır. – simbabque

+0

Hata için özür dilerim. Zaman 'girdileri' => $ sth-> fetchall_hashref ('Zaman'), –

cevap

9

Lütfen fetchall_hashref'un hashref {FieldValue => FieldsHash} döndürdüğünü unutmayın.

Bazı alan değerleri benzersiz değilse, bazı FieldHashes'ı (aynı Zaman değerine sahip sonraki her kaydın, sonuçta hashref'in üzerine yazılması) özlediniz.

Lütfen bu durumlarda satır dizilerini (selectall_arrayref) kullanın.

P.S .: Bu sorgudaki zaman her zaman benzersiz değildir (bazen iki kayıt aynı anda eklenebilir).

+3

'$ dbh-> selectall_arrayref ($ sql, {Slice => {}})' olmalıdır. Bu bir AoH üretir. – ikegami