如果已经显示,则跳过一行的方法

时间:2012-09-14 01:53:28

标签: php mysql loops

我有一个搜索脚本,它从一个表中检索一个整数,并使用它来搜索第二个表的ID。我的问题是如果Table1中的整数多出一次,我在查询Table2时会得到重复的结果。

有没有人知道使用SQL或PHP的方法,以便如果已经显示了一行,它会跳过它吗?感谢

我的代码非常有问题但是如果它有帮助的话就在这里:

//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

2 个答案:

答案 0 :(得分:1)

您似乎只使用了第一个查询中的contentid列,因此您可以将其更改为:

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

这意味着不会重复检索重复项,从而避免在更改第二组代码时遇到麻烦。

如果您在代码中的其他位置使用第一个查询中的其他列,只要没有重复的ID,您仍然可以使用此方法获取更多列:

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

如果 在原始查询中有重复的ID,我认为您必须将数据存储在变量(如数组)中,然后确保第二个数据集不是重复任何事情。

答案 1 :(得分:0)

听起来你只是在寻找一行,如果是这样,那么在你的SQL结束时,只需添加LIMIT 1。这将确保您只返回1行,从而忽略任何重复的匹配。