MeltingDog
MeltingDog

Reputation: 15488

A way to skip over a row if it has already been displayed

I have a search script that retrieves an integer from one table and uses it to search through the IDs of a 2nd table. My issue is if the integer in Table1 appears more then once, I get duplicate results when querying Table2.

Does anyone know a way to use SQL or PHP so that if a row is already displayed it will skip it? Thanks

My code is rather convuleted but here it is if it helps:

//TV FILTERS
$sql = 'SELECT * FROM `table1`';
$where = array();
if ($searchlocation !== 'Any') $where[] = '`value` LIKE "%'.$searchlocation.'%"';
if ($searchmake !== 'Any')  $where[] = '`value` LIKE "%'.$searchmake.'%"';
if ($searchtype !== 'Any') $where[] = '`value` LIKE "%'.$searchtype.'%"';
if (count($where) > 0) {
  $sql .= ' WHERE '.implode(' OR ', $where);
} else {
  // Error out; must specify at least one!
}

$tvqresult = mysql_query($sql);
$num_rowstvq = mysql_num_rows($tvqresult);
while ($rowtvq = mysql_fetch_array($tvqresult)) {
$contid =  $rowtvq['contentid'];

//MAIN QUERY
$mainsql = 'SELECT * FROM `table2` WHERE `content` LIKE "%' . $searchterm . '%" AND `id` = ' . $rowtvq['contentid'] . '  AND `template` = 12';

$resultmain = mysql_query($mainsql);

$num_rowsmain = mysql_num_rows($resultmain);
if (!$resultmain) {
continue;
}

else {
while ($row = mysql_fetch_array($resultmain )) {
  echo "[!Ditto? &parents=`134` &documents=" . $row['id'] . "&tpl=`usedtempchunk`!]";
}//END MAIN LOOP

}//END MAIN ELSE

}//END TV WHILE LOOP

Upvotes: 0

Views: 123

Answers (2)

Zamphatta
Zamphatta

Reputation: 4724

It sounds like you're only looking for 1 row, if so, then at the end of your SQL, simply add LIMIT 1. That'll ensure you only return 1 row, thereby ignoring any duplicate matches.

Upvotes: 0

Fluffeh
Fluffeh

Reputation: 33542

You only seem to use the contentid column from your first query, so you could change it to:

$sql = 'SELECT distinct contentid FROM `table1`'; // rest would be the same

which would mean that no duplicates will be retreived saving you any hassle in changing your second set of code.

If you are using other columns from the first query somewhere else in your code, you can still fetch more columns with this method as long as there are no duplicate IDs:

$sql = 'SELECT distinct contentid, contentTitle, contentThing FROM `table1`';

If you have to have repeated IDs in your original query, I think you will have to store the data in a variable (like an array) and then make sure that the second dataset isn't repeating anything.

Upvotes: 1

Related Questions