If you don't mind a few extra SQL calls, you can do a pseudo linked-list; that is, have each element have a 'previous' entry that points to the unique ID of the next element in the list, or NULL if this is the first entry. Then you can do a loop over a SQL statement such as:
my @order;
my $sth_1 = $dbh->prepare( "SELECT id FROM TABLE WHERE previous IS NUL
+L" ) or die $DBI->errstr;
my $sth_2 = $dbh->prepare( "SELECT id FROM TABLE WHERE previous IS ?"
+) or die $DBI->errstr;
$sth_1->execute() or die $DBI->errstr;
if ( $sth_1->rows() > 0 ) {
my ($id) = $sth_1->fetchrow_array();
push @order, $id;
$sth_2->execute( $id ) or die $DBI->errstr;
while ( $sth_2->rows() > 0 ) {
my ( $id ) = $sth_2->fetchrow_array();
push @order, $id;
$sth_2->execute( $id ) or die $DBI->errstr;
}
}
(That code could probably be optimized for logic of course.)
-----------------------------------------------------
Dr. Michael K. Neylon - mneylon-pm@masemware.com
||
"You've left the lens cap of your mind on again, Pinky" - The Brain
"I can see my house from here!"
It's not what you know, but knowing how to find it if you don't know that's important