For 1, your query is not quite right, it should use a join syntax:
SELECT figure_lines.Line_Id, Line_Name, Line_Nickname, Start_Decade, End_Decade, Manufacturer, Size, Cat_1, Cat_2, Cat_3, figure_lines.Approved, Locked, figure_lines.Added_By, Line_Text, picture.Filename
FROM figure_lines
INNER JOIN picture ON figure_lines.Line_Id = picture_lines.Line_Id
ORDER BY Line_Name DESC
a record will be returned for each picture which is the cause of the problem you are having, in your recordset output code, you need to add some hand coding to only show the figure_lines information once.
The idea of the code is this:
just before the recordset loop, create a variable that is empty:
<?php $rsID = ""; ?>
around the code that will display the info from the figure_lines table add an if statement so it will only show if the $rsID is NOT equal to the current figure_lines.Line_Id
<?php if($rsID != $row_RecordsetName['Line_Id']) { ?>
<code to output the recordset info>
<?php } ?>
then set the $rsID to the current Line_Id:
<?php $rsID = $row_RecordsetName['Line_Id']; ?>
same type of if statement, i dont know how your 'marking' the thumbnail column so cant really say exactly what to use in the if statement, but the idea is:
<?php if($row_RecordsetName['Thumbnail'] == '1') {?>
show images
<?php } ?>