У вас есть 2 столбца Link
, Status
в БД MyDatabase
.Столбец Link
содержит строки, значения выглядят как http://anysite.com/some/more/symbols?...
(varchar(256)
).Status
значения могут быть NULL
(по умолчанию) или 0
или 1
или 2
.(int(2)
).
Как обновить столбец Status
, чтобы заменить NULL
на 0
или 1
или 2
, используя следующие правила:
0) мы разделяем столбец Ссылка по группам в зависимости от его значения (ссылки, которые идут на один и тот же веб-сайт, даже на разные страницы, находятся в одной группе)
1) для всех ссылок в одной группе мызамените NULL
на 0
, если Status 0
хотя бы для 1 ссылки в этой группе;
для всех ссылок в той же группе, мы заменим NULL
на 1
, если Status 1
по крайней мере, для 1 ссылки в этой группе и нулей нет;
для всех ссылок в той же группе мы заменяем NULL
на 2
, если Status 2
по крайней мере для 1 ссылки в этой группе и тамнет 0
или 1
;
Так что 0
имеет самый высокий приоритет, затем идет 1
, затем 2
, а NULL
имеет самый низкий приоритет.
2) если все статусы NULL
для 1 группы, мы ничего не делаем.
В результате база данных MyDatabase
Link Status
-------------------------------------- ------
http://stackoverflow.com/question NULL
http://google.com/?query=AmIPregnant 2
http://stackoverflow.com/question/ask NULL
http://google.com/?query=weather NULL
http://google.com/?query=love 1
http://stackoverflow.com/question/abcd NULL
должна стать:
Link Status
-------------------------------------- ------
http://stackoverflow.com/question NULL
http://google.com/?query=AmIPregnant 1
http://stackoverflow.com/question/ask NULL
http://google.com/?query=weather 1
http://google.com/?query=love 1
http://stackoverflow.com/question/abcd NULL
Все ссылки содержат http://
, нет https://
, нет ftp://
в .com
и имеют не менее /
символов после .com
(это упрощает вопрособ этом запросе).
Можно ли сделать, используя всего 1 запрос?
Чтобы лучше понять вопрос, просто догадайтесь 1 = "Я проверил, этот веб-сайт содержит по крайней мере 1 страницу на английском языке", 2 = "Я проверил, этот веб-сайт содержит по крайней мере 1 страницупо-французски "NULL (по умолчанию) фактически означает" я посещаю 0 страниц на этом сайте ".
Цель состоит в том, чтобы обновить базу данных, используя всего один запрос.
Я бы предположилSELECT Link as currentlink, Status AS currentstatus FROM MyDatabase WHERE Status is NOT NULL
можно использовать для выбора тех значений, которые не равны NULL, чтобы обновить остальные значения, но тогда я застрял.
Спасибо.