If I understand correctly from this post as well as Re^2: select from mysql table based on two column match, there are two issues:
  1. How to write the UI code to get the two column values.
    I am looking to get input from terminal like, What is the value to match in columnA? cat <enter> What is the value to match in columnB? dog <enter>
  2. How to write the DBI code to use those values.

To address problem (1), consider some UI code like below. There of course many variants on how to do this. I present one framework that might be useful:

#!/usr/bin/perl use strict; use warnings; my @answers = get_user_answers ("First Name", "Last Name"); print "User Said: @answers\n"; @answers = get_user_answers ("Animal1", "Animal2"); print "User Said: @answers\n"; # # get array of answers to an array # of prompts. Any non-blank answer, that # is also a single space separated token is allowed # sub get_user_answers { my (@prompts) = @_; my @answers; foreach my $prompt (@prompts) { my $answer = prompt4answer($prompt); push (@answers, $answer); } return @answers; } # # get a non_blank, single token answer # for a single prompt # sub prompt4answer { my $prompt = shift; my $answer; while ( (print "$prompt: "), $answer = <STDIN>, $answer !~ /^\s*\S+\s*$/) { if ($answer =~ /^\s*\S+\s+\S+/) { print "Error! Only a single word allowed!\n"; } # note: Simply re-prompts (no Error!) on a blank line } # Normal UI convention is to ignore leading and # trailing white spaces $answer =~ s/^\s*//; # trim leading spaces $answer =~ s/\s*$//; # trim trailing spaces # also deletes line endings (\n) return $answer; } __END__ Example session: C:\Projects_Perl\testing>perl UI_multi_prompt.pl First Name: First Name: clark kent Error! Only a single word allowed! First Name: clark Last Name: kent User Said: clark kent Animal1: dog cat Error! Only a single word allowed! Animal1: Animal1: dog Animal2: cat User Said: dog cat
I have some issues with problem (2) the DBI code. Let us know if problem (1) is solved.

Addition:

I would recommend in the connect statement that you use the RaiseError option. If you do this, that eliminates a lot of "or die" clauses. Connect looks similar to this:

my $dbh = DBI->connect("dbi:SQLite:dbname=$dbfile","","",{RaiseError = +> 1}) or die "Couldn't connect to database: " . DBI->errstr;
This SQL is fine:
SELECT * FROM charge WHERE colA = 'cat' AND colB = 'dog'

However, in your program, I would use named SQL columns instead of '*' in the SQL statement.
Your code references columns 1,2,3,5 (skips 0 and 4)
Just delete column 0 and 4 in the SELECT by using SQL named fields instead of using '*'.

Instead of using $sth->fetchrow_array(), consider using $sth->fetchall_arrayref() for "small" result sets, 10K or 100K rows.

#code could look like this (untested): my $aref = $sth->fetchall_arrayref(); foreach my($cptanswer, $insid, $preauth, $updated)(@$aref) { print "\t$cptanswer\t$insid\t$preauth\t$updated\n"; }
Instead of:
while (@data = $sth->fetchrow_array()) { my $cptanswer = $data[1]; my $insid = $data[2]; my $preauth = $data[3]; my $updated = $data[5]; print "\t$cptanswer\t$insid\t$preauth\t$updated\n"; }

In reply to Re: select from mysql table based on two column match by Marshall
in thread select from mysql table based on two column match by abner

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.