2010-11-29 11 views
0

Ich verwende die neuesten MySQL.Wie UPDATE mit einem SELECT in MySQL zu verwenden

Ich habe zwei Tabellen: backlinks und pages.

Ich versuche, eine Spalte namens cache_links in der Tabelle pages für eine bestimmte URL zu aktualisieren. Die Spalte sollte der Anzahl der Zeilen in backlinks entsprechen, wobei destination = url.

Ich konnte tun dies in meiner Anwendung Sprache wie so, falls was ich meine ist, zu tun, ist nicht klar:

$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'"); 

Die Abfrage Ich habe zur Zeit zu bauen versucht, sieht wie folgt aus:

Das Problem, denke ich, ist bei backlinks.count(*). Ich habe keine Ahnung, was ich falsch mache. Der Fehler, den ich bekomme ist:

#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 

Jede Hilfe wird sehr geschätzt. Danke vielmals!

Antwort

8

Sie können eine korrelierte Unterabfrage verwenden.

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

Arbeitete wie ein Charme. Ich liebe dich - vielen Dank! Ich werde Ihre Antwort in ~ 7 Minuten akzeptieren, wenn ich kann. –

+1

Sie haben das in 2 Minuten beantwortet! Das muss eine Art Geschwindigkeitsrekord sein. +1! –