2016-07-13 2 views
1

Ich habe dies schon einmal getan und ich habe Null Idee, wie ich es geschafft habe. Dies ist Teil eines viel größeren Prozesses, weshalb das Erwähnen nicht erwähnenswert ist.MySQL setzen Wiederholungszahl in einem Feld

Ich habe eine Spalte in einer Tabelle, die ich die Anzahl der Wiederholungen der Zeile speichern muss. dh

Tabelle sieht derzeit wie diese

content | repeated 
------------------- 
aaa  | NULL 
bob  | NULL 
aaa  | NULL 

Erwartete Ausgabe wird die Tabelle Blick haben wie diese

content | repeated 
------------------- 
aaa  | 2 
bob  | 1 
aaa  | 2 

ich diese zählt mit deutlichem bekommen kann, oder COUNT (*), aber ich kann nicht für das Leben von mir erinnern, wie man eine einzelne Abfrage erhält, um gegen die ganze Tabelle zu laufen und alle wiederholten Rekordfelder zu aktualisieren.

+0

Unklar. Zeigen Sie Ihre erwartete Ausgabe anhand der Beispieleingabe besser an. – 1000111

+0

Aktualisiert, um zu verdeutlichen, dass Beispieltabellendaten ausgegeben werden – ima747

+0

Sie möchten Ihre Tabelle aktualisieren oder eine Abfrage auswählen? – 1000111

Antwort

2

Hier ist die Abfrage:

UPDATE 
your_table YT 
INNER JOIN 
(
    SELECT 
    content, 
    COUNT(*) total 
    FROM your_table 
    GROUP BY content 
) AS t 
ON YT.content = t.content 
SET YT.repeated = t.total; 

SQL FIDDLE DEMO In Demo Sie aktualisierte Daten, nachdem sie sehen werden

Erläuterung:

  • Ersteerhaltenfür jede content von der inneren Select-Abfrage und geben Sie einen Alias ​​t.
  • Dann machen Sie einen inner join zwischen einem anderen Alias ​​Ihrer Tabelle YT und t auf matching content.
  • Setzen Sie jetzt das wiederholte Feld von YT Tabelle auf den Wert von t.total.
+0

Mein Held! Beitrag: 'your_table AS YT' macht es ein bisschen leichter zu verstehen, ich fühle. Wenn kein einziges Inhaltsfeld vorhanden ist, müssen Sie sie in die Auswahl des inneren Joins (getrennt durch Kommata) und in das durch ANDs getrennte ON aufnehmen. Dies ist meistens eine Notiz für mich selbst, wenn ich es das nächste Mal zu einem kritischen Zeitpunkt vergesse. – ima747

+0

Das ist der Zweck von 'alias': um es lesbarer zu machen. Viel Glück, Junge! – 1000111

1

Sie haben eine Unterabfrage zu verwenden, um die Anzahl der Wiederholungen von Inhalt zu bestimmen, wickeln diese in einer anderen völlig bedeutungslos subquery um MySQL Beschränkung auszukommen aus der Tabelle auswählen, die geändert wird, und nehmen Sie an Unterabfrage in einem Update Aussage auf Ihrer ursprünglichen Tabelle:

update yourtable 
inner join 
    (select * 
    from 
     (select content, count(*) as repeat 
      from yourtable 
      group by content 
     ) t1 
    ) t2 on yourtable.content=t2.content 
set yourtable.repeated=t2.repeat