условное обновление записей MySQL-запроса - PullRequest
0 голосов
/ 25 декабря 2010

Есть ли какой-нибудь отдельный запрос msql, который может обновить DOB клиента? Я хочу обновить DOB тех клиентов, у которых DOB больше текущей даты. пример: - if a customer have dob 2034 update it to 1934 , if have 2068 updated with 1968.

В моей системе была ошибка, если вы вводите дату меньше 1970 года, она сохранялась как 2070. Ошибка устранена, но как насчет клиентов, у которых неправильный DOB. Поэтому я должен обновить их DOB.

Все клиенты хранятся в таблице customer_entity, а entity_id - это customer_id

Подробности следующие: -

desc customer_entity
    -> ;
+------------------+----------------------+------+-----+---------------------+----------------+
| Field            | Type                 | Null | Key | Default             | Extra          |
+------------------+----------------------+------+-----+---------------------+----------------+
| entity_id        | int(10) unsigned     | NO   | PRI | NULL                | auto_increment | 
| entity_type_id   | smallint(8) unsigned | NO   | MUL | 0                   |                | 
| attribute_set_id | smallint(5) unsigned | NO   |     | 0                   |                | 
| website_id       | smallint(5) unsigned | YES  | MUL | NULL                |                | 
| email            | varchar(255)         | NO   | MUL |                     |                | 
| group_id         | smallint(3) unsigned | NO   |     | 0                   |                | 
| increment_id     | varchar(50)          | NO   |     |                     |                | 
| store_id         | smallint(5) unsigned | YES  | MUL | 0                   |                | 
| created_at       | datetime             | NO   |     | 0000-00-00 00:00:00 |                | 
| updated_at       | datetime             | NO   |     | 0000-00-00 00:00:00 |                | 
| is_active        | tinyint(1) unsigned  | NO   |     | 1                   |                | 
+------------------+----------------------+------+-----+---------------------+----------------+
11 rows in set (0.00 sec)

И DOB хранится в таблице customer_entity_datetime, столбец value содержит DOB. но в этой таблице также хранятся значения всех других атрибутов, таких как fname, lname и т. д. Поэтому attribute_id со значением 11 является атрибутом DOB.

mysql> desc customer_entity_datetime;
+----------------+----------------------+------+-----+---------------------+----------------+
| Field          | Type                 | Null | Key | Default             | Extra          |
+----------------+----------------------+------+-----+---------------------+----------------+
| value_id       | int(11)              | NO   | PRI | NULL                | auto_increment | 
| entity_type_id | smallint(8) unsigned | NO   | MUL | 0                   |                | 
| attribute_id   | smallint(5) unsigned | NO   | MUL | 0                   |                | 
| entity_id      | int(10) unsigned     | NO   | MUL | 0                   |                | 
| value          | datetime             | NO   |     | 0000-00-00 00:00:00 |                | 
+----------------+----------------------+------+-----+---------------------+----------------+
5 rows in set (0.01 sec)

Спасибо.

1 Ответ

1 голос
/ 25 декабря 2010

Что-то вроде:

SELECT value_id, value, DATE_SUB(value, INTERVAL 100 YEAR) as 'correct'
FROM customer_entity_datetime
WHERE value > NOW()

должен дать вам эти строки. Чтобы обновить их, просто примените:

UPDATE customer_entity_datetime
SET value = DATE_SUB(value, INTERVAL 100 YEAR)
WHERE value > NOW()
...