Ваш первый цикл while повторяет все 5 результатов, по одному за раз.
Ваш второй цикл while выполняет итерацию по каждому из 5 результатов, создавая собственный набор результатов (т. Е. 3 результата для каждой из 5 итераций, всего 15 результатов).
Я считаю, что вы пытаетесь исключить все идентификаторы, найденные в первом цикле, из второго запроса. Вы можете сделать это следующим образом:
$sql = mysql_query("SELECT * FROM tablename");
$exclude = array();
while($row = mysql_fetch_array($sql)) {
array_push($exclude, $row['id']);
}
// simplify query if no results found
$where = '';
if (!empty($exclude)) {
$where = sprintf(' WHERE id NOT IN (%s)', implode(',', $exclude));
}
$sql = sprintf('SELECT * FROM secondtable%s', $where);
while($row = mysql_fetch_array($sql_2)) {
$id2 = $row["id2"];
echo $id2;
}