2012-09-14 20 views
0

我有一个搜索脚本,它从一个表中检索一个整数并使用它来搜索第二个表的ID。我的问题是,如果Table1中的整数出现多次,我查询Table2时会得到重复的结果。如果已经显示,则跳过一行的方法

有谁知道一种方法来使用SQL或PHP,以便如果一行已经显示,它会跳过它?由于

我的代码,而convul​​eted但在这里它是如果它可以帮助:

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

你可以张贴在你的选择中返回的记录? –

+0

难道你不能只对原始查询做一个SELECT DISTINCT吗? – andrewsi

回答

1

你似乎只是从你的第一个查询中使用contentid列,所以你可以将其更改为:

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

这意味着没有重复项会被重新保存,从而在更改第二组代码时省却麻烦。

如果您正在使用从你的代码别的地方先查询等栏目,你仍然可以用这种方法获取更多的列,只要没有重复的ID:

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

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

0

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

相关问题