0

I'm trying to pull info from a reference table into a landing page. Essentially the table is 2 fields, PromoCode & Description. This table will be updated on a regular basis and at the moment has 10 rows in it but that will increase over time. Is there a way to do a loop and a lookup in AMPScript when there's no primary key to match the data to in order to display the info in a landing page?

So it will display:

PromoCode1 Description1

All the way down to PromoCoade10, Description10. But when an 11th gets added into the table, the landing page automatically adds it in?

2

To clarify, you don't need a Primary Key when using LookupRows or LookupOrderedRows, but you do need a column in your data to match rows against (which has to be an exact match). This is a little frustrating, but the workaround is simple enough.

Create a new field in your DE named 'Display'. Make this a nullable field with a boolean type and a default value of 'True'. Then use the following code in your landing page, replacing PromotionsDE with the name of your Data Extension:

<!DOCTYPE html>
<html>
<head>
<style>

table {
    font-family: arial, sans-serif;
    border-collapse: collapse;
    width: 400px;
}

td, th {
    font-family: arial, sans-serif;
    border: 1px solid #dddddd;
    text-align: left;
    padding: 8px;
}

tr:nth-child(even) {
    background-color: #dddddd;
}
</style>
</head>
<body>
<table>
  <tr>
    <th>Row</th>
    <th>Promo Code</th>
    <th>Description</th>
  </tr>

%%[
var @rows, @rowcount

set @rows = LookupRows('PromotionsDE','Display', 1)
set @rowcount = RowCount(@rows)

if @rowcount > 0 then

var @i
for @i = 1 to @rowcount do

var @promocode, @description, @row
set @row = Row(@rows,@i) 
set @promocode = Field(@row,"PromoCode")
set @description = Field(@row,"Description")
]%%

   <tr>
      <td>%%=v(@i)=%%</td>
      <td>%%=v(@promocode)=%%</td>
      <td>%%=v(@description)=%%</td>
   </tr>

%%[ next @i ]%%

%%[ else ]%%

 <tr><td colspan="3">No rows found.</td></tr>

%%[ endif ]%% 

</table>
</body>
</html>

This page will render the following HTML:

FYI, if you ever have a need to hide specific DE rows from appearing in the table, then you can just add the 'Display' field to false.

|improve this answer|||||
  • That's good to hear. Please feel free to accept my answer for the benefit of others. – Eliot Harper Apr 11 '17 at 10:35

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.