Nevermind, I was thinking too hard... this was actually quite trivial.
Here's what I added to the code:

my $row;my $date = '';
# set the `logbook` variableswhile ($row = $sth->fetchrow_hashref())
{my  $id = $row->{id};my  $date_added =
DateTime::Format::MySQL->parse_timestamp($row->{date_added});my  $day
= DateTime::Format::MySQL->parse_timestamp($row->{date_added});my
$username = $row->{username};my  $entry = $row->{entry};
my $entry_date = $date_added->strftime("%d");if ($date ne $entry_date) {
    print "\\section*{" . $date_added->strftime("%a, %d %b %Y ") . "} ";
    $date = $date_added->strftime("%d");}






On Sun, Sep 15, 2013 at 1:16 AM, J M <jmd...@gmail.com> wrote:

>
>
> <http://stackoverflow.com/questions/18809731/mysql-perl-and-latex-trying-to-loop-through-results-by-day-as-a-latex-sectio#>
>
> I have written a Perl script (shown below) to loop through my MySQL
> database and then output a .tex file, as a sort of programmed custom
> report. As it stands, it works rather well.
>
> However, I'd like to "separate" each individual day (as a section in
> LaTeX), so that I can eventually add a table of contents and see one day
> per section (there can be many entries a day).
>
> To clarify a little, I don't need assistance with the LaTeX part... I'm
> just trying to figure out if it makes more sense to have Perl loop through
> many MySQL queries (grabbing entries by a single day), or to have one query
> (like I do now) and have Perl do something else.
>
> Here's what the script looks like now (I know it's a little ugly, feel
> free to give me pointers on anything weird you might notice):
>
> Please let me know if you have any ideas/suggestions or need more
> information.
>
>
> #! /usr/bin/perl
> use strict;use warnings;
> use DBI;use DateTime::Format::MySQL;use HTML::Restrict;
> # html removermy $hr = HTML::Restrict->new();
> # database connection stuffmy $dbh = DBI->connect(
>     "dbi:mysql:dbname=olin2",
>     "user",
>     "password",
>     { RaiseError => 1 },        ) or die $DBI::errstr;
>
> # query to grab ALL entries from `olin2`.`lobby`, ordered by datemy $sth = 
> $dbh->prepare("select l.id, l.date_added, l.username,
>                         l.entry
>                         from logbook l
>                         order by l.date_added desc");
> $sth->execute();
> # the LaTeX document preambleprint<<EOF;
> \\documentclass{article}
> \\usepackage{framed,graphicx,xcolor}
> \\usepackage[top=.5in, bottom=.5in, left=.5in, right=.5in]{geometry}
> \\usepackage{etoolbox}
> \\BeforeBeginEnvironment{shaded}{\\begin{center} 
> \\noindent\\begin{minipage}{.9\\linewidth}}
> \\AfterEndEnvironment{shaded}{ \\end{minipage}\\end{center} }
> \\raggedbottom
> \\setlength{\\parskip}{.2em}
> \\setlength{\\parindent}{0cm}
> \\nonstopmode
> \\setlength{\\topsep}{0pt}
>
> \\begin{document}
> \\definecolor{shadecolor}{gray}{.9}
>
> EOF
> my $row;
> # set the `logbook` variableswhile ($row = $sth->fetchrow_hashref()) {
>         my      $id = $row->{id};
>         my      $date_added = 
> DateTime::Format::MySQL->parse_timestamp($row->{date_added});
>         my      $username = $row->{username};
>         my      $entry = $row->{entry};
>
>         # filter some stuff out to make LaTeX behave
>         $entry =~ s/<br \/>/\\\\/g;
>         $entry =~ s/\\//g;
>         $entry =~ s/\#/\\#/g;
>         $entry =~ s/\&/\\&/g;
>         $entry =~ s/\_/\\_/g;
>
>         # filters out HTML tags
>         $entry = $hr->process($entry);
>
>         # get the first name of the `logbook`.`entry` author
>         my $fname_query = 'select fname from users where username = ?';
>         my @row1 = $dbh->selectrow_array($fname_query,undef,$username);
>         my $fname = $row1[0];
>
>         #print " \\fbox{";
>
>         # each logbook entry is in a minipage (prevents line breaks in the 
> middle
>         # of an entry)
>         print " \\begin{minipage}{\\linewidth}";
>
>         # the date and author are in a table (easier to read)
>         print " \\begin{tabular}{l r} \\\\ ";
>         print $date_added->strftime("%a, %d %b %Y at %l:%M %p & ") .
>                 'By: ' . $fname .
>                 '\\end{tabular} \\\\ \\vspace{.2em} \\\\' . $entry . ' 
> \\smallskip ';
>
>         # query to grab the comments associated with this particular logbook 
> entry
>         my $comment_sth = $dbh->prepare("select c.date_added as cdate, 
> c.username cuser, c.comment from comments as c
>                                                 where c.logbook_id = ?
>                                         order by c.date_added asc");
>         $comment_sth->execute($id);
>
>         # set up the comments variables
>         while (my $row = $comment_sth->fetchrow_hashref()) {
>                 if(defined($row->{comment}) && $row->{comment} ne '') {
>                         # comments are shaded to stand out
>                         print "\\begin{shaded}";
>                         my      $comment_date = 
> DateTime::Format::MySQL->parse_timestamp($row->{cdate});
>                         my      $comment_username = $row->{cuser};
>                         my      $comment = $row->{comment};
>
>                         # filter some stuff out so LaTeX behaves
>                         $comment =~ s/<br \/>//g;
>                         $comment =~ s/\\//g;
>                         $comment=~ s/\#/\\#/g;
>                         $comment =~ s/\&/\\&/g;
>                         $comment =~ tr/\n//d;
>                         $comment =~ s/\_/\\_/g;
>
>                         # filters out HTML
>                         $comment = $hr->process($comment);
>
>                         # gets the comment author's first name (functionize 
> this!)
>                         my $fname_query = 'select fname from users where 
> username = ?';
>                         my @row2 = 
> $dbh->selectrow_array($fname_query,undef,$comment_username);
>                         my $comment_fname = $row2[0];
>
>                         print "Date: " . $comment_date->strftime("%a, %d %b 
> %Y at %l:%M %p") . " \\\\ ";
>                         print "By: $comment_fname \\\\";
>                         print "$comment \\\\ ";
>                         print "\\end{shaded} ";
>                 }
>         }print '\\vspace{.1em} \\\\ ';print "\\end{minipage}";print " 
> \\hrule"; # seperates the logbook entries from each other
> } # end of the main loop
> print '\end{document}';
> # clean up
> $sth->finish();
> $dbh->disconnect();
>
>

Reply via email to