我有一个搜索脚本,它从一个表中检索一个整数,并使用它来搜索第二个表的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
答案 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行,从而忽略任何重复的匹配。