Я использую последнюю версию MySQL.
У меня есть две таблицы: backlinks
и pages
.
Я пытаюсь обновить столбец с именем cache_links
в таблице pages
для определенного URL-адреса. Столбец должен равняться количеству строк в backlinks
, где destination
= url
.
Я мог бы сделать это на моем языке приложений, например, в случае, если я хочу сказать, не ясно:
$myURL = "http://google.com/";
$numLinksResult = mysqli_query($c, "SELECT count(*) AS `num` FROM `backlinks` WHERE `same_domain` = FALSE AND `url` = '$myURL'");
$numLinksRow = mysqli_fetch_assoc($numLinksResult);
$numLinks = $numLinksRow['num'];
mysqli_query($c, "UPDATE `pages` SET `links` = $numLinks WHERE `url` = '$myURL'");
Запрос, который я пытался создать в настоящее время, выглядит следующим образом:
UPDATE `pages`, `backlinks` SET pages.`cache_links` = backlinks.count(*)
WHERE backlinks.`destination` = pages.`url`
AND backlinks.`same_domain` = FALSE
AND pages.`url` = 'http://google.com/'
Проблема, я думаю, в backlinks.count(*)
. Я понятия не имею, что я делаю неправильно. Ошибка, которую я получаю:
#1064 - You have an error in your SQL syntax; check the manual that corresponds
to your MySQL server version for the right syntax to use near '*)
WHERE backlinks.`destination` = pages.`url` AND backlinks.`same_' at line 1
Любая помощь приветствуется. Спасибо тонну!
Вы можете использовать коррелированный подзапрос.
UPDATE `pages`
SET pages.`cache_links` =
(SELECT COUNT(*)
FROM backlinks
WHERE backlinks.`destination` = pages.`url`
AND backlinks.`same_domain` = FALSE
)
WHERE pages.`url` = 'http://google.com/'