2012-03-21 10 views
1

私はユーザの誕生日(YYYY-MM-DD)のユーザテーブルと、年齢のを持っています。私はを計算するためのスクリプトを実行して、年齢の列を夜間にcronで更新したいと考えています。MySQLの更新年齢の列

このSQLは、年齢を選択し、計算に適しています:

SELECT 
    DATE_FORMAT(NOW(), '%Y') - 
    DATE_FORMAT(`birthday`, '%Y') - 
    (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(`birthday`, '00-%m-%d')) AS age 
FROM 
    `jos_jcourse_students` 

をしかし、それは1つのステートメントで更新年齢欄に可能ですか?次のことを試してみましたが、私がやったのは年齢の列にすべての0を入力することでした!何らかの種類のMySQLループを使用する必要がありますか?

UPDATE 
    `jos_jcourse_students` 
SET 
    age = "SELECT DATE_FORMAT(NOW(), '%Y') - 
    DATE_FORMAT(`birthday`, '%Y') - 
    (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(`birthday`, '00-%m-%d')) AS age 
FROM 
    `jos_jcourse_students`" 
+0

の主キーですか? –

+1

ここで年齢の列は重複しているようです。あなたはそれを完全に取り除くことができず、必要に応じて年齢を計算することができなかった理由は何ですか?それは計算の複雑さのようにそうではありません::) – cHao

+0

ええ、それを取り除くことができたかもしれませんが、すでにそのようにプログラムされているので、DB構造を変更したくない;) – lee

答えて

3
UPDATE `jos_jcourse_students` 
SET age = DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)), '%Y')+0 

ORあなたのロジックに従って、それはあなたが自己技術に参加を使って、上記の結果を達成することができます

UPDATE `jos_jcourse_students` 
SET age =((DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(`birthday`, '%Y')) - 
    (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(`birthday`, '00-%m-%d'))) 
+0

- この短い計算と元のものを使って何が欠けていますか? – lee

+0

計算はOKです。あなたはupdate selectを使う必要はありません...それはちょうど更新を使用してOKになるでしょう –

+0

、ありがとう! – lee

0
UPDATE 
    `jos_jcourse_students` 
SET 
    age = (SELECT DATE_FORMAT(NOW(), '%Y') - 
    DATE_FORMAT(`birthday`, '%Y') - 
    (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(`birthday`, '00-%m-%d')) AS age 
FROM 
`jos_jcourse_students`) 
+0

はこれに構文エラーがあります。 .. – lee

+0

私は最後の括弧を忘れてしまったと思います...今すぐお試しください – NarayaN

0

一つの方法になります。すなわち固有のID(主キーの例studentId)

UPDATE jos_jcourse_students a, 
     (SELECT studentId, DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(`birthday`, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(`birthday`, '00-%m-%d')) AS age 
     FROM `jos_jcourse_students`) b 
SET a.age = b.age 
WHERE a.studentId = b.studentId 

を使用して同じテーブルに参加注:studentIdは、あなたが一度にこのクエリを試してみましたjos_jcourse_students