2017-03-05 4 views
0

Ich benutze diese Abfrage zur Aktualisierung des Artikels veröffentlicht von AutorenWie durch COUNT aus einer anderen Tabelle in meinem SQL

UPDATE authors SET total_articles = 
(
SELECT COUNT(*) FROM articles 
WHERE articles.author_id=authors.author_id 
GROUP BY author_id 
) 

jedoch zu aktualisieren, wenn ich eine zusätzliche WHERE Klausel hinzufügen, nur veröffentlichten Artikel als

zu zählen
UPDATE authors SET published_articles = 
(
SELECT COUNT(*) FROM articles 
WHERE articles.author_id=authors.author_id AND articles.status='published' 
GROUP BY author_id 
) 

Die count(*) zählt nicht korrekt die Anzahl der veröffentlichten Artikel.

Antwort

1

was ist, wenn Sie die Abfrage wie unten

UPDATE authors SET published_articles = 
(
SELECT COUNT(*) FROM articles a 
JOIN authors au ON a.author_id = au.author_id 
WHERE a.status='published' 
GROUP BY a.author_id 
) 
1

dies auf Ihre Dateninhalt zusammenhängen könnte sich ändern, aber die Beziehung auf einem Join auf subselect Ergebnis stützen könnte

UPDATE authors 
    INNER JOIN (
    SELECT articles.author_id , COUNT(*) as num 
    FROM articles 
    WHERE articles.author_id=authors.author_id 
    AND articles.status='published' 
    GROUP BY author_id 
) t on t.author_id=authors.author_id 
    SET published_articles = t.num 
1

Versuchen Sie, die UPDATE mit mit JOIN:

update authors a 
join (
    select author_id, 
     count(*) cnt 
    from articles 
    where status = 'published' 
    group by author_id 
    ) ar 
    on ar.author_id = a.author_id 
set a.total_articles = ar.cnt; 

Es findet filte Zählen Sie die Anzahl der veröffentlichten Artikel pro Autor in der Unterabfrage und verbinden Sie sie mit der Autorentabelle, um die Spalte zu aktualisieren.

Verwandte Themen