2017-07-04 4 views
-1

Ich versuche, eine Spalte in meiner Mysql-Datenbank hinzufügen, dass alle Spalten ausgehend von ‚tokenvalid‘ fasst, die den Wert von 1 oder 0Mysql Summe alle Spalten mit einigen Wortanfang

nehmen und lassen Sie uns sagen, ich habe 50 Spalten wie die in meiner Datenbank (zB tokenvalid1, tokenvalid2 ...., tokenvalide50) mit anderen Spalten dazwischen.

Nachfolgend finden Sie den Code, den ich implementieren möchte. Ich weiß, dass das überhaupt nicht stimmt, aber es ist nur, um dir eine Vorstellung davon zu geben, was ich zu tun versuche. Vielen Dank für Ihre Hilfe!

'SELECT *, sum(column_name LIKE "tokenvalid"%) as total FROM points WHERE 1' 
+1

Ein Schema wie das verstößt gegen die [Zero, One oder Unendlich-Regel] (http://en.wikipedia.org/wiki/Zero_one_infinity_rule) von [Datenbank Normalisierung ] (http://en.wikipedia.org/wiki/Database_normalization), das ist also wahrscheinlich die Quelle Ihrer Probleme hier. Sie können keine zufälligen Spaltennamen addieren, Sie wählen im Allgemeinen nur eins und eins pro 'SUM()' Aufruf. – tadman

Antwort

0

So etwas sollte Ihnen helfen.

SET @colname = (SELECT GROUP_CONCAT(`column_name`) from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='points' AND `column_name` LIKE 'tokenvalid%'); 
SET @table = 'points'; 
SET @query = CONCAT('SELECT SUM(',@colname,') FROM ', @table); 
PREPARE stmt FROM @query; 
EXECUTE stmt; 

ähnlich this Antwort von RocketDonkey