2017-07-18 41 views
-1

我想用“year_from”和“year_to”数据“模型名称”更新选择特定行,但我已经对随机MODEL_ID 6K的车型,所以我想更新型号名称匹配MODEL_ID。如果我删除line'where model_id = 2',它将用最小值和最大值更新整个表格。我怎样才能修改这个查询?更新CONCAT在MySQL

UPDATE lc_vehicles2 
SET model_name = concat(model_name, ' (', (
SELECT MIN(year_from) 
FROM (SELECT * FROM lc_vehicles2) AS VEHICLES 
WHERE model_id = 2),'-', (
SELECT MAX(year_to) 
FROM (SELECT * FROM lc_vehicles2) AS VEHICLES 
WHERE model_id = 2),')') 

表结构:

brand_id | brand_name | model_id | model_name | year_from | year_to 
502  | audi  | 2288  | A6   | 1999.06 | 2006.01 
145  | volvo  | 2154  | S60  | 2006.06 | 2012.12 
+0

使用[制备语句](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php):'WHERE MODEL_ID ='或'WHERE MODEL_ID =:id',(取决于你更喜欢什么)。或者我误解了你的问题? –

+0

你能否在你的问题中分享表格结构? –

+0

我的意思是我希望它可以根据model_id上传model_name。我有6k模型,随机数字为model_id,每个模型都有随机数字的dublicates。我想知道如何自动解决这个问题,而无需每次都输入model_id。 – JoeDoe

回答

0
UPDATE lc_vehicles2 VH 
INNER JOIN 
(
    SELECT MIN(year_from) MIN_YEAR,model_id FROM lc_vehicles2 GROUP BY model_id 
)MIN_TABLE ON MIN_TABLE.model_id=VH.model_id 
INNER JOIN 
(
    SELECT MAX(year_to) MAX_YEAR,model_id FROM lc_vehicles2 GROUP BY model_id 
)MAX_TABLE ON MAX_TABLE.model_id=VH.model_id 
SET model_name = CONCAT(VH.model_name,'(',MIN_TABLE.MIN_YEAR,'-',MAX_TABLE.MAX_YEAR,')') 

尝试上述查询。

+0

太棒了!非常感谢你。只要编辑SELECT MAX以选择“year_to”,以防其他人发现此答案。 – JoeDoe