Запросить конкретный случай - PullRequest
0 голосов
/ 11 декабря 2018

Как следует из названия, я натолкнулся на конкретный случай, или оба описываю его дословно, а затем сообщаю о логике моих таблиц.Пример: мы допускаем, что есть событие, это событие посещено клиентом, и этот клиент может иметь 1 магазин или более магазинов, участвующих в этом событии.Пока ничего странного.На странице событий у меня есть таблица, которая показывает мне полный список событий, заказанных для моих клиентов, и затем, если человек хочет обратиться к странице сведений об этом событии, он может обратиться к магазинам этого клиента, участвующим в этом событии, и ко всемхарактеристики, но мы остаемся на странице, которая показывает мне все события, связанные с клиентом.

Моя проблема заключается в следующем.

  1. Я создаю клиента
  2. Я создаю событие
  3. Я связываю магазины с покупателем для этого события
  4. Я перехожу на страницу событий
  5. Я вижу все
  6. НО, еслиЯ удаляю из таблицы клиентов, клиента, которого я зарегистрировал (пункт 1), вся таблица, связанная с событиями, исчезнет.

Вместо этого мне бы хотелось, чтобы, даже если клиент был отменен, событие, котороеассоциируется с тем, что клиент не исчезает, а только отсутствуют данные о имени и фамилии этого клиента.

Я взял этот тривиальный пример, чтобы сделать cУзнав, в чем заключалась моя проблема, теперь я сообщаю о таблицах и ниже запроса

Имя таблицы клиента: clienti

CREATE TABLE `clienti` (
  `cliente_id` int(11) NOT NULL,
  `nome` varchar(255) NOT NULL,
  `cognome` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `telefono` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Имя таблицы событий: campagne_cliente

CREATE TABLE `campagne_cliente` (
  `id_campagna_cliente` int(11) NOT NULL,
  `cliente_id_campagna` int(11) NOT NULL,
  `impianto_id_campagna` int(11) NOT NULL,
  `nome_campagna_cliente` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

где impianto_id_campagna - идентификаторы товаров (магазинов)

Идентификатор и продолжительность названия события стола: campagne

CREATE TABLE `campagne` (
  `id_campagna` int(11) NOT NULL,
  `data_inizio` date NOT NULL,
  `data_fine` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Единственная часть, которую я пропустил, - это магазины (продукты)потому что мне было все равно, чтобы понять в качестве примера, процесс, я уже создал все свои продукты.

Я создаю клиента, и у меня есть информация в таблице клиентов

Я создаюначало и конец события и перейдите к таблице campagne

. Привязать клиента к одному или нескольким продуктам и перейти к таблице campagne_cliente

и показать все с помощью этого запроса:

"SELECT DISTINCT nome_campagna_cliente
              , nome
              , cognome
              , telefono
              , email
              , cliente_id
              , data_inizio
              , data_fine
              , id_campagna_cliente
           FROM clienti 
           JOIN campagne_cliente 
             ON campagne_cliente.cliente_id_campagna = clienti.cliente_id
           JOIN campagne 
             ON campagne.id_campagna = campagne_cliente.id_campagna_cliente
             GROUP BY campagne.id_campagna"

Теперь у меня есть стандартный случай в таблице campagne_cliente

- id_campagna = id of event
- cliente_id_campagna = id of customer
- impianto_id_campagna = id of products

Практический пример:

- id_campagna = 10
- cliente_id_campagna = 30
- impianto_id_campagna = 42

, если я иду к таблице клиентов и удаляю идентификатор клиента = 42

с запросом, который я написал выше, как мне показать другую информацию, даже если этот клиент с идентификатором 42 больше не существует, спасибо

1 Ответ

0 голосов
/ 11 декабря 2018

Если вы удаляете запись из клиентской базы, вам нужно написать:

SELECT DISTINCT nome_campagna_cliente
              , nome
              , cognome
              , telefono
              , email
              , cliente_id
              , data_inizio
              , data_fine
              , id_campagna_cliente
           FROM clienti 
           RIGHT OUTER JOIN campagne_cliente 
             ON campagne_cliente.cliente_id_campagna = clienti.cliente_id
           RIGHT OUTER JOIN campagne 
             ON campagne.id_campagna = campagne_cliente.id_campagna_cliente
             GROUP BY campagne.id_campagna

Пока вы это делаете, вы должны взглянуть на внешний ключ (особенно такие вещи, как ON DELETE SET NULL) здесь .

Ура

...