@Nik_1011

Как вывести название автомобиля один раз и настроить взаимозависимость select(база данных в mysql)?

Здравствуйте.Подскажите,пожалуйста.

Задача
Сделать такую форму
5fffd341f2319787254496.png

Есть данная csv-таблица
5fffd3914db8a083324833.png

Вопрос:
1)Если сделать одну таблицу в phpAdmin с полями(id,car_make,car_model), то если выводить циклом car_make(Accura например), то будет выводится 10 раз Accura в поле "Выберите марку". Как этого избежать?

2) Каким образом можно настроить взаимозависимость select'ов(Accura->CL,Audi->A1), уникального id у модели автомобиля нет. Например,
car_make=Audi
car_make_id = 1
car_model= A1
car_model_id = 1

car_make=Accura
car_make_id = 2
car_model= CL
car_model= 2
  • Вопрос задан
  • 152 просмотра
Решения вопроса 1
agoalofalife
@agoalofalife
Team Lead
Начальный вариант это нормализованные таблицы
Например:
- Таблица car_make
- Таблица car_model
Где в car_model есть поле car_make_id, это внешний ключ и он уже имеет индекс.
Далее вы выводите список(form select) из вашей таблицы или поиском(пользователь вводить начало названия) по таблице в car_make
Пользователь выбирает определенную марку, в таблице car_model вы можете по id выдать список всех моделей.
Что касательно дат, реализовать можно по разному.
В вашем файле у вас фиксированный диапазон и его можно добавить в таблицу car_model двумя колонками.
Если модель может иметь несколько диапазонов выпуска, можно это хранить в отдельной таблице, где поля будут такие:
car_model_id, start_date, finish_date
Соответственно при выборе в интерфейсе определенной модели, мы можем выбрать список с диапазонами дат.
Правильных ответов тут нет, и зависит от целей, какие могут быть перспективы и так далее.

Например в одном моем проекте был похожий функционал. И использование такой формы, показало что разные марки и модели могут по-разному вводиться пользователями, для примера есть лада и ваз.
И пользователь будет вводить всегда свою версию.
В таком случае для каждой модели и марки пришлось заводить отдельные таблицы - словари.
Где версия пользователя, хранила ссылку на стандартную версию.
То есть у нас была Лада.
Соответственно:
ВАЗ = Лада
Лада = Лада
Kalina - Калина
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Kasperenysh
@Kasperenysh
Рецидив в особо острой форме))
1)SELECT DISTINCT `car_make` FROM `tbl`;

2)
SELECT `car_model` FROM `tbl` WHERE `car_make` = 'Accura';
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы