Изменить: переместит это наверх, чтобы избежать путаницы:
Я не имею права голоса или права принимать решения о структуре базы данных, поэтому я должен работать с тем, что у меня есть. В противном случае, как указано в большинстве комментариев, эта проблема будет значительно упрощена за счет нормализации и очистки таблиц.
У меня есть таблица базы данных, которая содержит модели автомобилей и некоторые «категории» (национальный автомобиль, импортный автомобиль, пикап, фургон и т. д.). Следует отметить, что эти категории представлены в целочисленных кодах.
В этой таблице есть 10 столбцов категорий для каждой строки (Использование1, Использование2, Использование3 и т. д.), поэтому у каждого автомобиля их может быть до 10.
Затем у меня есть еще одна таблица, содержащая описания, соответствующие каждому коду категории (например, национальный автомобиль = 1, импортный автомобиль = 2 и т. д.).
У меня есть форма, которая содержит два элемента выбора HTML: один для автомобилей, а другой для категорий.
<div class="form-group row">
<label class="col-sm-2 form-control-label">Cars</label>
<div class="col-sm-6">
<select class="form-control" id="car_model" name="car_model" onchange="fetch_categories(this.value);">
<option>Car 1</option>
<option>Car 2</option>
<option>Car 3</option>
</select>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 form-control-label">Category</label>
<div class="col-sm-4">
<select class="form-control" name="category">
<option>Select a car first...</option>
</select>
</div>
</div>
Мне нужно заполнить выбор категории на основе значения выбора автомобилей. Это делается с помощью Ajax (часть, которая работает по назначению и, вероятно, не имеет отношения к теме).
Функция Ajax отправляет данные об автомобиле в php-скрипт, который успешно получает все соответствующие категории с помощью запроса.
С чем я борюсь, так это с использованием результатов этого запроса для получения описаний всех категорий, которые были получены из него с помощью другого запроса.
Я попытался выполнить foreach, чтобы перебрать все результаты запроса № 1, а затем выполнить запрос № 2, а затем сформулировать теги <option>
, но я не понимаю это правильно.
<?php
$car_model = $_POST['get_car'];
$query = "SELECT CodUso1,
CodUso2,
CodUso3,
CodUso4,
CodUso5,
CodUso6,
CodUso7,
CodUso8,
CodUso9,
CodUso10 AS categories FROM cars WHERE car_model = '$car_model'";
$stmt = $pdo->prepare($query);
$stmt->execute();
$result = $stmt->fetchAll();
foreach ($result['categories'] as $u):
if ($result['CodUso1'] != 0 ||
$result['CodUso2'] != 0 ||
$result['CodUso3'] != 0 ||
$result['CodUso4'] != 0 ||
$result['CodUso5'] != 0 ||
$result['CodUso6'] != 0 ||
$result['CodUso7'] != 0 ||
$result['CodUso8'] != 0 ||
$result['CodUso9'] != 0 ||
$result['CodUso10'] != 0) {
$query = "SELECT description FROM categories WHERE code = '$u'";
$stmt = $pdo->prepare($query);
$stmt->execute();
$result2 = $stmt->fetchAll();
?>
<option value="<?php echo $u ?>">
<?php echo $result2; ?>
</option>
<?php
}
endforeach;
exit;
?>
Результирующие <option>
элементы должны содержать код автомобиля в качестве значения и описание в качестве его «описания».
Прошу прощения, если объяснение слишком запутанное, если вам нужна дополнительная информация или разъяснения, пожалуйста, дайте мне знать.
Изменить: пример var_dump из результата первого запроса:
array(20) { ["CodUso1"]=> string(3) "101" [0]=> string(3) "101" ["CodUso2"]=> string(3) "502" [1]=> string(3) "502" ["CodUso3"]=> string(3) "305" [2]=> string(3) "305" ["CodUso4"]=> string(3) "406" [3]=> string(3) "406" ["CodUso5"]=> string(3) "103" [4]=> string(3) "103" ["CodUso6"]=> string(3) "508" [5]=> string(3) "508" ["CodUso7"]=> string(3) "455" [6]=> string(3) "455" ["CodUso8"]=> string(1) "0" [7]=> string(1) "0" ["CodUso9"]=> string(1) "0" [8]=> string(1) "0" ["coduso"]=> string(1) "0" [9]=> string(1) "0" }
Скриншоты таблиц:
Имейте в виду, что это фактические имена таблиц и столбцов, я изменил их в приведенном выше коде для иллюстрации.
$result
наvar_dump($result)
- person Serghei Leonenco   schedule 29.11.2019