Member 13347492 Ответов: 1

Как заменить переменную именем Поля в SQL-запросе


У меня есть таблица с видами Филдса, Адамса, Аллегейни и т. д. (за исключением первого, каждое из названий полей является названием округа – всего 67).

У меня есть список выбора, основанный на другой таблице названий округов (67 записей). Имена в этом списке совпадают с именами полей в таблице выше.

Я хочу, чтобы пользователь выбрал округ, а затем отобразил содержимое только полей " вид " и округ, который был выбран.

Такие как виды, Адамс
или виды, углерод
и т.д.

Я попробовал код ниже, но когда я выбираю округ, отображается поле вида, но больше ничего.

Я знаю, что могу написать отдельный запрос для каждого округа и заставить select ссылаться на него, но это кажется пустой тратой кода.

Есть ли простой способ заставить эту замену имени Поля работать?

Что я уже пробовал:

$colname_rsCountyLists = "-1";
if (isset($_POST['County'])) {
  $colname_rsCountyLists = $_POST['County'];
}

$maxRows_rsCountyLists = 10;
$pageNum_rsCountyLists = 0;
if (isset($_GET['pageNum_rsCountyLists'])) {
  $pageNum_rsCountyLists = $_GET['pageNum_rsCountyLists'];
}
$startRow_rsCountyLists = $pageNum_rsCountyLists * $maxRows_rsCountyLists;

mysql_select_db($database_PaSiteGuide, $PaSiteGuide);
$query_rsCountyLists = "SELECT AOU_Order, SPECIES, SCINAME, {$colname_rsCountyLists} FROM countybirdlists";
$query_limit_rsCountyLists = sprintf("%s LIMIT %d, %d", $query_rsCountyLists, $startRow_rsCountyLists, $maxRows_rsCountyLists);
$rsCountyLists = mysql_query($query_limit_rsCountyLists, $PaSiteGuide) or die(mysql_error());
$row_rsCountyLists = mysql_fetch_assoc($rsCountyLists);

if (isset($_GET['totalRows_rsCountyLists'])) {
  $totalRows_rsCountyLists = $_GET['totalRows_rsCountyLists'];
} else {
  $all_rsCountyLists = mysql_query($query_rsCountyLists);
  $totalRows_rsCountyLists = mysql_num_rows($all_rsCountyLists);
}
$totalPages_rsCountyLists = ceil($totalRows_rsCountyLists/$maxRows_rsCountyLists)-1;

mysql_select_db($database_PaSiteGuide, $PaSiteGuide);
$query_rsCounties = "SELECT counties.CountyName FROM counties ORDER BY counties.CountyName";
$rsCounties = mysql_query($query_rsCounties, $PaSiteGuide) or die(mysql_error());
$row_rsCounties = mysql_fetch_assoc($rsCounties);
$totalRows_rsCounties = mysql_num_rows($rsCounties);
?>

<head>
</head>

<body>			

<form action="Test1.php" method="post" name="form1" target="_self" id="form1">

<p>
  <label for="select">Select:</label>
  <select name="County" id="select" onchange="this.form.submit()">
    <?php
do {  
?>
    <option value="<?php echo $row_rsCounties['CountyName']?>"><?php echo $row_rsCounties['CountyName']?></option>
    <?php
} while ($row_rsCounties = mysql_fetch_assoc($rsCounties));
  $rows = mysql_num_rows($rsCounties);
  if($rows > 0) {
      mysql_data_seek($rsCounties, 0);
	  $row_rsCounties = mysql_fetch_assoc($rsCounties);
  }
?>
  </select>
<p> </p>

</form>

<p><?php echo $colname_rsCountyLists;?></p>
<table width="372" border="0">
<tr>
  <td width="180"><?php do { ?>
      <table width="372" border="0">
        <tr>
          <td width="182"><?php echo $row_rsCountyLists['SPECIES']; ?></td>
          <td width="180"><?php echo $row_rsCountyLists['{$colname_rsCountyLists}']; ?></td>
          </tr>
      </table>
      <?php } while ($row_rsCountyLists = mysql_fetch_assoc($rsCountyLists)); ?></td>
</tr>
</table>
<p> </p>
</body>
</html>
<?php
mysql_free_result($rsCountyLists);
mysql_free_result($rsCounties);
?>

j snooze

разве это не было бы больше похоже
$query_rsCountyLists = "SELECT AOU_Order, SPECIES, SCINAME". $colname_rsCountyLists . "От графов-птицеловов";

Member 13347492

Это тоже не работает.

1 Ответов

Рейтинг:
2

W∴ Balboos, GHB

Ваша проблема гораздо серьезнее, чем вы думаете.

Таблица с 67 полями сама по себе является проблемой. MySQL-это реляционная база данных,и вы не используете ее.

Вам нужен стол больше похожий:
REC_ID, SPECIES char, SPECIES DATA,..., COUNTY_ID int
вместе со вторым столом
COUNTY_ID int, COUNTY char

Во второй таблице вы перечисляете каждый из округов с уникальным (числовым идентификатором). Это лучше всего сделать, сделав его полем идентификации. Теперь у вас есть таблица с 66 строками, по одной для каждого округа.

Теперь - когда выбран округ, вы можете вытащить список из первой таблицы всех видов, которые связаны с этим округом, и выбрать из него. Или наоборот.

Отобразите результат, создав внутреннее соединение в двух таблицах (через COUNTY_ID), а затем в предложении where укажите уникальную запись, содержащую выбранный вами вид и округ.

ПОЧЕМУ ЭТО ЛУЧШЕ? Оба списка могут расширяться без изменения схемы SQL или таблицы. Он работает "вечно".

Отказ от ответственности: есть еще лучшие способы создать эту ассоциацию. У меня, например, была бы таблица округов/county_id; данные о видах, species_id и таблица, связывающая эти два типа, County_ID, Species_ID. Затем один выбирает округ (или выбирает вид) и может найти все связанные совпадения.

Не совсем ответ на ваш вопрос. Может быть, даже полезнее.