Как организовать хранение заявок и клиентов в БД?
На сайте есть функция (форма) оставить заявку на продукты и оставить заявку на обратный звонок (тоже форма). Для оставления заявки на продукты нужно ввести: Имя, электронную почту и какое-то сообщение, а для оставления заявки на обратный звонок нужно ввести только имя и номер телефона.
В данный момент к сайту подключена база с помощью phpmyadmin и заявки на обратный звонок и услуги записываются в две разных таблицы, а конкретно: application_back_call (таблица заявок на обратные звонки) с полями таблицы: id, name, phone_number и таблица application_product (таблица заявок на продукты) с полями таблицы: id, name, email, message.
Также на сайте существует таблица, в которую я вывожу эти заявки (по сути данные клиентов для заявки).
Теперь главный вопрос, подскажите пожалуйста максимально понятно насколько это возможно, как правильно организовать хранение клиентов и заявок в базе данных, если у меня 2 формы где пользователь может оставить либо номер телефона либо почту. Нужно ли создавать две таблицы для клиентов, которые оставляют заявки на продукты где требуется номер телефона и таблицу для клиентов где требуется электронная почта? Заранее извиняюсь если как-то криво или непонятно расписал, пытался максимально подробно разложить свой вопрос. Скрины таблицы базы данных прикрепляю к вопросу
Дополнительно:
Теперь главный вопрос, подскажите пожалуйста максимально понятно насколько это возможно, как правильно организовать хранение клиентов и заявок в базе данных, если у меня 2 формы где пользователь может оставить либо номер телефона либо почту.
Делаете таблицу для пользователей, в которой присутствуют поля для телефона и для эл.почты. И записываете либо телефон, либо эл. почту и потом выводите где нужно соответствующее поле. С таблицами по заявкам связываете пользователей по user_id.
Нужно ли создавать две таблицы для клиентов, которые оставляют заявки на продукты где требуется номер телефона и таблицу для клиентов где требуется электронная почта?
Нет, не нужно. Просто выводите там где нужно телефон, а в другом случае эл.почту.
Таблица users: id, name, phone_number, email;
Таблица application_product: id, user_id, message;
Потом вы можете делать запрос к базе данных, например, так:
SELECT u.name, u.email, ap.message FROM application_product ap JOIN users u ON ap.user_id = u.id WHERE ... |
SELECT u.name, u.email, ap.message FROM application_product ap JOIN users u ON ap.user_id = u.id WHERE ...
Для application_back_call соответственно выбираете u.phone_number вместо u.email.
- Спасибо ваш ответ вроде понятен и подходит, подскажите тогда пожалуйста: достаточно ли будет связать id пользователя с необходимой таблицей, или надо связывать user_id и phone_nubmer (с таблицей на звонки) или userd_id и email (с таблицей на продукты)? надеюсь я понятно спросил
- zitape, достаточно user_id, так как это уникальное поле. Только перед тем как добавлять в таблицу новых пользователей, нужно делать проверку на существование пользователя по телефону или email.
- Благодарю за развернутый ответ
Ответы:
Я бы сделал одну таблицу
application_orders с полями
id, type, name, phone_number, email, message.
type - тип заявки - продукты или звонок
- тут только что ответ был, но он почему то удалился, поэтому подскажите пожалуйста: в первом ответе предложили сделать 2 разные таблицы с заявками с полями: id, id_user, (email или phone_number в зависимости от типа заявки) и message (относится только к таблице с заявкой на продукты) и связать это внешним ключом с таблице пользователей.
Просто мне нужно минимум 2 таблицы чтобы была возможность их связать между собой, и одной из них насколько я правильно понимаю должна быть таблица с пользователями. - zitape, а посетителям вашего сайта необходимо регистрироваться на нем, чтобы оставить заявку?
- Сергей delphinpro, нет, не обязательно, есть отдельная страница чтобы заявку оставить
- zitape, ну значит ни о каком поле user_id речи быть не может. К кому вы заявки привязывать будете?
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос


Для организации хранения заявок и клиентов в базе данных можно создать две таблицы: "clients" и "orders".
Таблица "clients" будет содержать информацию о клиентах, такую как идентификатор клиента, имя, фамилия, контактная информация и другие данные. Пример структуры таблицы "clients" в SQL:
CREATE TABLE clients ( id INT AUTO_INCREMENT PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50), email VARCHAR(100), phone VARCHAR(20), address VARCHAR(255) );
Таблица "orders" будет содержать информацию о заявках, которые сделали клиенты. В этой таблице можно хранить данные о продуктах или услугах, которые были заказаны, статус заказа, дату заказа и другие дополнительные поля. Пример структуры таблицы "orders" в SQL:
CREATE TABLE orders ( id INT AUTO_INCREMENT PRIMARY KEY, client_id INT, product_name VARCHAR(100), order_date DATE, status VARCHAR(20), FOREIGN KEY (client_id) REFERENCES clients(id) );
Для связи между таблицами "clients" и "orders" используется внешний ключ client_id в таблице "orders", который ссылается на идентификатор клиента в таблице "clients".
Таким образом, при добавлении новой заявки в базу данных нужно сначала добавить информацию о клиенте в таблицу "clients", затем создать запись о заявке в таблице "orders", указав соответствующий client_id.
Такая структура базы данных позволит эффективно хранить информацию о клиентах и их заявках, а также упростит выполнение запросов для получения нужных данных, например, список всех заявок определенного клиента или общее количество заявок за определенный период времени.