Словами можно пояснить чего это такое, без кода, ибо он просто муть какая-то?
Я не знаю чего вы там выгребаете из базы и почему куча таблиц, поэтому не на этом примере, а дальше уж не знаю как.
1) Представленный список имен, значениями опций которого также имена, в базе по такому запросу
"SELECT names from my_base" имеет право на существование только в том случае, если значения поля таблицы
"names" принадлежат записям с уникальными значениями. Но при таком раскладе список может оказаться слишком большим по размеру (сотни Марин, Андреев, ...) и вряд ли кто-то станет в нем разбираться. А ввиду того, что имена есть значения не уникальные такой список теряет всякий смысл.
2) Предположим, что имена в выборке принадлежат уникальным записям, а по списку имен нужно будет во всех записях таблицы
"my_base" найти записи у которых поле
"names" содержит имя выбранное в списке. Но для этого список должен содержать только уникальные значения, то есть в нем не должно быть повторяющихся имен. Для запрос должен выбрать из таблицы только уникальные значения и должен выглядеть так:
$result = $connection->query("SELECT DISTINCT names FROM my_base");
3) Если поле формы не имеет имени, то оно не будет передано на север, то есть значения из списка <select class="names" id="N'.$x.'"> просто не будет. Поэтому назовем его
"name" - <select class="names" name="name">. Предположим, что данный список уже был у клиента и он выбрал в нем некое имя отправив форму методом GET. По полученному GET запросу сервер произведет поиск в этой таблице, отдаст результат клиенту наряду со списком, полученный запросом как показано выше. Строя сам список будет проверять совпадения значения запроса и значения из базы:
$selected = isset($_GET['name']) ? $_GET['name'] : null;
$select = '<select class="names" name="name"><option value="">Выберите имя...</option>';
while ($row = mysql_fetch_assoc($result)) $select .= '<option value="'.$row['names'].'" '.
($row['names']==$selected ? 'selected' : null).'>'.$row['names'].'</option>';
echo $select . '</select>';