插入表格并从表格中选择,其中columnname = xxx和columnname2 = yyy循环太多

时间:2018-11-15 19:57:48

标签: coldfusion mariadb lucee

我会尽量做到完整而简洁。如果我遗漏了一些东西,请告诉我。

我有一个活动集合,每个活动都包含完成该给定活动所必需的步骤。每个步骤都有一些与步骤一起进行的其他组件。如果您将其视为一棵树,它将看起来像这样:

ACTIVITY -- STEP ---- COMPONENT

下面是组件表的数据集结果。

enter image description here

我正在寻找写一条mySQL insert / select语句,该语句将允许我复制ID = 84。不过,在插入内容中,ID值应该继承ACTIVITY的新ID(例如,让我们用299),而AID应该继承STEP值的新ID(例如,让我们加上501,502,503,504,505,506)。

我知道mySQL语句是什么样的,这不是问题。我遇到的问题是如何编写循环,以便可以传入新的ID和新的AID值。 SID是主键(自动递增)。

使用上面给定的数据集,我希望插入6条新记录。相反,我得到9,所以我的循环无法正确循环,或者我传递了错误的数据。

这是循环:

for (local.data.newAID in local.data.list_newAID){
    //  COPY SET
    for (local.data.origAID in local.data.list_existingAID){
        local.formDataStruct.origAID = local.data.origAID;
        variables.workoutDAO.makeCopyCoreSet(
            origID = local.dataStruct.ID,
            newID = local.dataStruct.newID,
            origAID = local.dataStruct.origAID,
            newAID = local.dataStruct.newAID
        );
    }
}

这是makeCopyCoreSet函数:

INSERT INTO SET(ID, LID, AID)
SELECT
    :newID, LID, :newAID
FROM
    Set
WHERE ID = :origID AND AID = :origAID;

我想念什么?

1 个答案:

答案 0 :(得分:2)

我们要复制我们的一个活动,因此我们希望传递要复制的ID和我们希望成为新ID的ID(除非我们有另一种方法来确定它)。

variables.workoutDAO.NEW_makeCopyCoreSet(
            origID = local.dataStruct.ID,
            newID = local.dataStruct.newID
        );

然后在我们的NEW_makeCopyCoreSet()函数(CF函数)中,进行查询:

INSERT INTO component (ID, LID, AID)
SELECT DISTINCT :newID, LID, AID 
FROM component
WHERE ID = :origID

要查看实际运行情况(从SQL端来看):

https://dbfiddle.uk/?rdbms=mariadb_10.2&fiddle=ba4328dca3327814a7dc18fea284ead8

首先,我们设置基本数据。

/* SETUP 1 */
CREATE TABLE component ( ID int, LID int, AID int, SID int UNIQUE AUTO_INCREMENT)

/* SETUP 2 */
INSERT INTO component (ID, LID, AID)
SELECT 84,0,432 UNION ALL
SELECT 84,0,433 UNION ALL
SELECT 84,0,434 UNION ALL
SELECT 84,0,435 UNION ALL
SELECT 84,0,435 UNION ALL
SELECT 84,0,435 UNION ALL
SELECT 84,0,435 UNION ALL
SELECT 84,0,436 UNION ALL
SELECT 84,0,437

/* What's in the original? */
SELECT * FROM component
ID | LID | AID | SID
-: | --: | --: | --:
84 |   0 | 432 |   1
84 |   0 | 433 |   2
84 |   0 | 434 |   3
84 |   0 | 435 |   4
84 |   0 | 435 |   5
84 |   0 | 435 |   6
84 |   0 | 435 |   7
84 |   0 | 436 |   8
84 |   0 | 437 |   9

然后,我们将现有ID复制到新ID。

/* Copy an ID. */
INSERT INTO component (ID, LID, AID)
SELECT DISTINCT 299, LID, AID 
FROM component
WHERE ID = 84

/* What's in the table for the new ID? */
SELECT * FROM component WHERE ID = 299
 ID | LID | AID | SID
--: | --: | --: | --:
299 |   0 | 432 |  16
299 |   0 | 433 |  17
299 |   0 | 434 |  18
299 |   0 | 435 |  19
299 |   0 | 436 |  20
299 |   0 | 437 |  21