是否可以动态地从第二个表条目引用mysql表条目值?

时间:2014-10-24 03:26:45

标签: mysql automatic-updates

我找不到任何关于动态地将一个MySQL表条目引用到另一个MySQL表项的信息。这可能是不可能的。

基本上,我想知道在MySQL中你是否能够将某个Excel单元格的值引用到另一个单元格。例如,如果在Excel中我将Sheet 1 Cell A1设置为某些值,如" MyVal"。然后,如果我将Sheet 2 Cell A1设置为" = Sheet1!A1"和表3单元格A1到" = Sheet2!A1" Sheet 3 Cell A1的值是" MyVal"。如果我回到Sheet 1 Cell A1并将值更改为" MyNewVal"然后在Sheet 2 Cell A1和Sheet 3 Cell A1上自动更新该值到" MyNewVal"。

我的问题是......在MySQL中,我可以将第一个表中某个条目的值设置为动态链接到第二个表中不同条目的值,这样当我查询第一个表时(使用现有的PHP代码)我得到第二个表中的值?我想如果它可能,那么第一个表中的条目值可能看起来像一个查询查询第二个表以获取正确的值。

我理解如何在PHP中编写UPDATE查询以明确地使值相同但我不想更改现有的PHP代码。我想以相对/动态的方式链接它们。原因很简单,我不想更改PHP代码,因为在我维护的几个网站上使用了相同的代码,我希望保持现有的PHP代码相同以便更清洁维护/升级。

但是,由于各个站点上的数据库已经不同,因此以某种方式动态链接数据库本身不同表中的相应条目将非常简洁。

非常感谢任何帮助。如果这是可能的,如果你能指出我正确的方向,我很乐意做研究。

3 个答案:

答案 0 :(得分:4)

有2.5种方法可以做到这一点(基本上有两种,但感觉就像有三种方法):

从最简单到最难......

选项1:

如果您需要tableA来反映tableB的值,请不要将值存储在tableA中,只需使用tableB的值即可。使用连接:

select a.*, b.col1
from tableA a
join tableB b on <some join condition>

或子选择

select *, (select col1 from tableB where <some condition>) col1
from tableA

选项2:

如果您对选项1感到满意,请将其转换为视图,其行为类似于表(除了更新连接视图的限制):

create view myview as 
select ... (one of the above selects)

选项3:

创建一个数据库触发器,当tableB的值发生更改时触发该触发器,并将值复制到tableA中相应的行/列

create trigger tableB_update
after update on tableB
for each row
update tableA set
tablea_col = new.col1
where id = new.tableA_id;

请注意,newold是赋予新行和旧行的特殊名称,因此您可以引用要更新的表中的值。

选择最适合您需求的选项。

答案 1 :(得分:1)

数据库并不真正提供这种类型的设施,它是一个完全不同的范例。

使用连接,分组或函数可以获得相同的结果。

或者,如果您希望保存表示形式,请将查询存储到视图中,以使其可以从各种界面重复使用。有关观点的更多信息,请点击此处; http://www.mysqltutorial.org/mysql-views-tutorial.aspx

任何更复杂的事情,您都需要查看一些业务分析工具。

答案 2 :(得分:0)

也许您过分简化了问题,但您不需要使用触发器。只需加入表格,随时都可以使用MyVal&#39;已更改,它将自动通过查询提供。

CREATE TABLE Sheet1
    (
      `ID` int auto_increment primary key
    , `A` varchar(5)
    )
;

INSERT INTO Sheet1
    (`A`)
VALUES
    ('MyVal')
;

CREATE TABLE Sheet2
    (
      `ID` int auto_increment primary key
    , `Sheet1FK` int)
;

INSERT INTO Sheet2
    (`Sheet1FK`)
VALUES
    (1)
;

CREATE TABLE Sheet3
    (
      `ID` int auto_increment primary key
    , `Sheet2FK` int)
;

INSERT INTO Sheet3
    (`Sheet2FK`)
VALUES
    (1)
;

查询1

select
        sheet3.id id3
      , sheet2.id id2
      , sheet1.id id1
      , sheet1.a
from sheet1
inner join sheet2 on sheet1.id = sheet2.sheet1fk
inner join sheet3 on sheet2.id = sheet3.sheet2fk

<强> Results

| ID3 | ID2 | ID1 |     A |
|-----|-----|-----|-------|
|   1 |   1 |   1 | MyVal |