【发布时间】:2018-12-11 15:54:21
【问题描述】:
正如标题所暗示的,我遇到了一个特定的案例,或者我在这里逐字描述它,然后报告我的表格的逻辑。 例子: 我们承认有一个活动,这个活动有一个客户参加,这个客户可以有1个或多个店铺,参加这个活动。 到目前为止没有什么奇怪的。 在活动页面上,我有一个表格,显示为我的客户订购的整个活动列表,然后如果有人想咨询该活动的详细信息页面,他可以咨询参与该活动的该客户的商店以及所有特征,但我们仍停留在向我显示与客户相关的所有事件的页面上。
我的问题是这样的。
- 我创建了一个客户
- 我创建一个事件
- 我将商店与该事件的客户相关联
- 我进入活动页面
- 我什么都能看到
- 但是如果我从客户表中删除我在(项目 1)注册的客户,与事件相关的整个表将消失。
相反,我希望即使客户被取消,与该客户关联的事件也不会消失,而只是缺少该客户的姓名和姓氏数据。
我用这个简单的例子来说明我的问题是什么,现在我报告表格和下面的查询
客户表名称: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 是产品(商店)的 ID
餐桌活动名称的id和持续时间: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
如果我去客户表并删除客户 id = 42
使用我上面写的查询,即使 ID 为 42 的客户不再存在,我如何仍然显示其他信息,谢谢
【问题讨论】:
-
如果你放一些
RIGHT OUTER JOIN而不是你的JOIN会发生什么? -
@user10600584 你说的我该怎么做?
-
你自己查询,而不是
JOIN campagne_cliente,你写RIGHT OUTER JOIN campagne_cliente。您可能需要为 2JOIN -
@user10600584 你相信我不知道该怎么做......对不起,你能把它写成答案吗?有两个连接?
-
没有问题。每个人都需要从基础开始吧?
标签: php mysql sql inner-join