0

1つのテーブルから整数を取得し、それを使用して2番目のテーブルの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
4

2 に答える 2

1

最初のクエリの列のみを使用しているように見えるため、次のcontentidように変更できます。

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

これは、重複が取得されないことを意味し、2番目のコードセットを変更する手間を省きます。

コード内の別の場所で最初のクエリから他の列を使用している場合でも、重複するIDがない限り、このメソッドでさらに多くの列をフェッチできます。

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

元のクエリでIDを繰り返す必要がある場合は、データを変数(配列など)に格納してから、2番目のデータセットが何も繰り返さないようにする必要があると思います。

于 2012-09-14T01:56:49.967 に答える
0

1行だけを探しているようです。その場合は、SQLの最後に。を追加するだけLIMIT 1です。これにより、1行のみが返されるため、重複する一致は無視されます。

于 2012-09-14T01:59:42.990 に答える