Как использовать UPDATE с SELECT в MySQL

0

Я использую последнюю версию 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

Любая помощь приветствуется. Спасибо тонну!

Теги:
mysql-error-1064

1 ответ

8
Лучший ответ

Вы можете использовать коррелированный подзапрос.

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/'
  • 0
    Работал как шарм. Я люблю тебя - большое спасибо! Я приму ваш ответ через ~ 7 минут, когда смогу.
  • 1
    Вы ответили на это через 2 минуты! Это должно быть какой-то рекорд скорости. +1!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню