簡體   English   中英

基於另一個表的多行的mySQL更新列

[英]mySQL update column based on multiple rows of another table

我有兩個表,dma_projects和projectsteps:

dma_projects具有以下字段:projectID projectName projectInstructions

CREATE TABLE IF NOT EXISTS `dma_projects` (
  `projectID` int(11) NOT NULL DEFAULT '0',
 `projectName` varchar(100) DEFAULT NULL,
 `projectDescription` text,
 `projectImage` varchar(255) DEFAULT NULL,
 `projectThumb` varchar(255) DEFAULT NULL,
 `projectCategory` varchar(50) DEFAULT NULL,
  `projectTheme` varchar(50) DEFAULT NULL,
  `projectInstructions` text,
  `projectAuthorID` int(11) DEFAULT NULL,
  `projectViews` int(11) DEFAULT NULL,
 `projectDifficulty` varchar(20) DEFAULT NULL,
 `projectTimeNeeded` varchar(40) DEFAULT NULL,
 `projectDateAdded` int(11) DEFAULT NULL,
 `projectStatus` varchar(20) DEFAULT NULL,
 `projectVisible` varchar(1) DEFAULT NULL,
 PRIMARY KEY (`projectID`),
 KEY `user_id` (`projectAuthorID`),
 KEY `date` (`projectDateAdded`),
 FULLTEXT KEY `image` (`projectImage`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;

projectsteps具有:stepID stepno stepdesc project_id

CREATE TABLE IF NOT EXISTS `projectsteps` (
  `projectStep_id` int(11) NOT NULL AUTO_INCREMENT,
  `stepno` int(11) DEFAULT '0',
  `stepdesc` text CHARACTER SET utf8 COLLATE utf8_bin,
  `project_id` int(11) NOT NULL,
  PRIMARY KEY (`projectStep_id`)
)

我想用在projectsteps表中找到的具有相同projectID的任何行的值更新dma_projects.projectInstructions。

dma_projects中的projectID 1在projectsteps中有5條記錄,應將這5條記錄的stepdesc連接起來(用a分隔
),然后更新到dma_projects表的projectInstructions字段。

我正在為如何編寫查詢而煩惱。 這是我到目前為止的位置,但是我無法正常工作。 它說的錯誤是:

 Unknown column 'projectsteps.stepno' in 'field list'

這是查詢:

UPDATE `dma_projects` t1
SET t1.`projectInstructions` = 
(
SELECT 
        `projectsteps`.`stepno`, 
        group_concat(`projectsteps`.`stepdesc` separator '<br/>')
        FROM `projectsteps`

AS somevar
INNER JOIN `projectsteps` t2
ON t1.projectID=t2.project_id
ORDER BY t2.stepno ASC
)   

更新

UPDATE dma_projects p JOIN
(
  SELECT project_id, GROUP_CONCAT(CONCAT('<li>', stepdesc, '</li>') SEPARATOR '') instructions
    FROM
  (
  SELECT project_id, stepdesc
    FROM projectsteps
   ORDER BY project_id, stepdesc
  ) a
   GROUP BY project_id
) d ON d.project_id = p.projectid 
   SET p.projectInstructions = d.instructions

樣本輸出:

| PROJECTID | PROJECTNAME |                                          PROJECTINSTRUCTIONS |
------------------------------------------------------------------------------------------
|         1 |    project1 | <li>step11</li><li>step12</li><li>step13</li><li>step14</li> |
|         2 |    project1 | <li>step21</li><li>step22</li><li>step23</li>                |

這是SQLFiddle演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM