2017-07-18 1 views
-1

'year_from'と 'year_to'データで 'model_name'を更新しようとしていますが、ランダムなmodel_idを持つ6kモデルがあるので、一致するモデル名を更新したいmodel_id。 'model_id = 2'の行を削除すると、テーブル全体が最小値と最大値で更新されます。このクエリを変更するにはどうすればよいですか?MySQLの特定の行に対してconcat selectを更新する

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

[prepared statements](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php): 'WHERE model_id =?'または 'WHERE model_id =:id'を使用します(あなたが好む方)。あるいは私はあなたの質問を誤解していますか? –

+0

あなたの質問にテーブル構造を教えてください。 –

+0

私はそれがmodel_idにmodel_nameの一致を更新することを意味します。私はmodel_idのための乱数を持つ6kモデルを持っています。それぞれの乱数には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

関連する問題