#php #mysql #project
#php #mysql #проект
Вопрос:
Мне 14 лет, и я сам учу PHP. Я собираюсь создать базу данных запчастей для магазина по ремонту газонокосилок моего отца.
Каждая газонокосилка имеет «OEM» номера, но OEM-запчасти стоят дорого. У моего отца есть поставщики, которые производят детали, совместимые с этими OEM-деталями, и в конце каталогов есть таблицы OEM с номером детали в каталогах
Я хочу иметь возможность вводить номер OEM в поле поиска, а затем выводить каждый совместимый номер детали каталога вместе с тем, из какого каталога он взят… Надеюсь, это понятно.
Прямо сейчас я извлек данные из каталогов и имею 6 таблиц базы данных, подобных этой
id | oem | partnumber
------ ------------ ----------------------
| |
Имя таблицы — это имя каталога.
У меня есть небольшой опыт программирования (некоторое время играл с arduinos и raspberry pi), поэтому у меня есть немного знаний, но я никогда ничего не делал с базами данных. Я также знаю html и css и немного javascript.
Я вижу это как шаги:
- получите номер OEM из поля поиска.
- найдите OEM в каждой таблице
- Если есть совпадение, верните номер детали и каталог
- если нет совпадения, отобразите «ничего не найдено»
Я вроде как понимаю это в своей голове, но я полностью запутался в поиске по многим таблицам с 1 запросом…. Я не могу сделать это с помощью «одного» запроса, потому что мне нужно, чтобы имя каталога (имя таблицы) тоже возвращалось … простым вариантом было бы создать 1 таблицу, но я хочу обновить это в будущем, и это сделало бы это очень сложным.
Я думаю, что мне нужно задать имена таблиц в виде массива и выполнить цикл по массиву, выполнив запрос, но я не могу понять, как я это сделаю???
Как именно вы бы это сделали?
Я делаю это неправильно?
Я мог бы выполнить много запросов, я думаю, но меня всегда учили, что повторение кода обычно означает, что вы делаете это неправильно, поэтому я не хочу этого делать. Я хочу учиться правильно…
большое спасибо
Комментарии:
1. Почему бы просто не иметь одну таблицу и добавить
catalog_id
столбец? А затем еще одна таблица с информацией каталога, связанной с таблицей номеров деталей?2. Осторожно — похоже, вы создали таблицу для каждого каталога, а не просто реляционную структуру, где у вас есть 1 таблица каталогов и 1 таблица деталей, где у деталей есть поле для идентификатора каталога.
3. ^ Точно, я предлагаю вам разработать ее на бумаге, а затем реализовать. У вас должна быть таблица для каждого реального объекта (например, ITEM). Плюс, если нужна таблица для многих отношений
4. Удачи, сынок! Папа гордится тобой
Ответ №1:
Вы на правильном пути. Возможно, вы захотите сделать так называемую нормализацию в мире баз данных. По сути, это означает, что если у вас есть что-то, что является ссылочным, например, OEM, Каталог и т. Д., Вы можете перенести это в отдельную таблицу, а затем вы можете ссылаться на его идентификатор, а не на значение, и таким образом избежать дублирования.
SQL создан для такого рода запросов (если вам интересно, вам следует взглянуть на логику на основе наборов и диаграммы Венна, которые помогут понять sql).
Итак, у вас может быть запрос, который выглядит следующим образом
SELECT
p.PartNumber,
p.Price,
c.Name
FROM
Parts p
INNER JOIN
OEM oem
ON
p.OEMId = oem.id
INNER JOIN
Catalog c
ON
c.Id = oem.CatalogId
WHERE
oem.slug = 'OEM123ABC'
Ответ №2:
Вы делаете это неправильно. Поместите имя каталога в таблицу, если это все, что нужно. Тогда вы можете выполнить SQL-запрос, например:
SELECT part_number FROM table_name WHERE catalog='catalog_name' AND oem='search_term';
Убедитесь, что установили соответствующие индексы.