gpt4 book ai didi

php - 查询具体情况

转载 作者:行者123 更新时间:2023-11-29 16:34:02 24 4
gpt4 key购买 nike

正如标题所示,我遇到了一个特定的案例,或者我在这里逐字描述它,然后报告我的表格的逻辑。例子:我们承认有一个事件,这个事件有一位客户参加,并且这个客户可以有 1 个商店或更多商店,参与这个事件。到目前为止没有什么奇怪的。在事件页面上,我有一个表格,显示为我的客户订购的事件的完整列表,然后如果有人想查阅该事件的详细信息页面,他可以咨询该客户参与该事件的商店以及所有特征,但我们仍保留在显示与客户相关的所有事件的页面上。

我的问题是这样的。

  1. 我创建了一个客户
  2. 我创建一个事件
  3. 我将商店与该事件的客户相关联
  4. 我进入事件页面
  5. 我可以看到一切
  6. 但是,如果我从客户表中删除我在(第 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;

我唯一忽略的部分是商店(产品),因为我不在乎作为示例来理解,过程是我已经创建了所有产品。

我创建了一个客户,并且我在 clienti 表中拥有信息

我创建一个开始和结束事件并转到表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

如果我转到 clienti 表并删除客户 id = 42

使用上面写的查询,即使 id 42 的客户不再存在,我如何仍然显示其他信息,谢谢

最佳答案

如果你从clienti中删除记录,你需要写:

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 这样的东西)here .

干杯

关于php - 查询具体情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53727797/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com