Mehrere Spalten nach einen bestimmten Wert suchen und addieren

CreativPur

Erfahrenes Mitglied
Hi,

ich habe eine Datenbank mit verschiedenen Spalten..
zahl1, zahl2, zahl3, zahl4, zahl5 zahl6

in jeder dieser Spalten können mehrfach die gleichen Werte(Zahlen) vorkommen.

Z.B die 25

Nun möchte ich wissen, wie oft die 25 in der gesamten Tabelle vorkommt.

Mit einer Spalte (zahl1) habe ich es hin bekommen..
PHP:
$pdo = new PDO('mysql:host=xxx;dbname=xxx', 'xxx', 'xxx');
$statement = $pdo->prepare("SELECT COUNT(*) AS anzahl FROM Ziehung WHERE zahl1  = ? ");
$statement->execute(array('25')); 
$row = $statement->fetch();

echo "Die Zahl  wurde ".$row['anzahl']." gezogen";

Wie bekomme ich aber hin, dass ich die 25 aus allen 6 Spalten addieren und ausgeben kann ?

z.B.
echo "Die Zahl 25 wurde insgesamt" 14 "mal gezogen"

Vielen Dank
 
Aufbau & Inhalt der Relation:
SQL:
CREATE TABLE Ziehung (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `zahl1` INT( 11 ),
  `zahl2` INT( 11 ),
  `zahl3` INT( 11 ),
  `zahl4` INT( 11 ),
  `zahl5` INT( 11 ),
  `zahl6` INT( 11 ),
INDEX ( `id` )
);

INSERT INTO Ziehung (zahl1,zahl2,zahl3,zahl4,zahl5,zahl6) VALUES
                    (   5,     5,    5,    5,    5,    5),
                    (  25,    25,   25,   25,   25,   25),
                    (   5,    25,    5,    5,   25,    5),
                    (   5,    25,    5,   25,    5,   25);

SQL-Abfrage:
SQL:
SELECT SUM(Anzahl1+Anzahl2+Anzahl3+Anzahl4+Anzahl5+Anzahl6) AS Anzahl FROM (
  SELECT
      SUM(CASE zahl1 WHEN 25 THEN 1 END) AS Anzahl1,
      SUM(CASE zahl2 WHEN 25 THEN 1 END) AS Anzahl2,
      SUM(CASE zahl3 WHEN 25 THEN 1 END) AS Anzahl3,
      SUM(CASE zahl4 WHEN 25 THEN 1 END) AS Anzahl4,
      SUM(CASE zahl5 WHEN 25 THEN 1 END) AS Anzahl5,
      SUM(CASE zahl6 WHEN 25 THEN 1 END) AS Anzahl6
  FROM Ziehung
  )_tmp

sqlfiddle:
http://sqlfiddle.com/#!9/904b6b/1/0
http://sqlfiddle.com/#!9/904b6b/1/0
 
Ich habe folgendes Versucht..
Leider ohne Erfolg

Es wird mir kein Wert ausgegeben

PHP:
$pdo = new PDO('mysql:host=xxx;dbname=DBxxx', 'Ixxx', 'xxx');
 
$statement = $pdo->prepare("SELECT SUM(Anzahl1+Anzahl2+Anzahl3+Anzahl4+Anzahl5+Anzahl6) AS Anzahl FROM (
  SELECT
      SUM(CASE zahl1 WHEN 25 THEN 1 END) AS Anzahl1,
      SUM(CASE zahl2 WHEN 25 THEN 1 END) AS Anzahl2,
      SUM(CASE zahl3 WHEN 25 THEN 1 END) AS Anzahl3,
      SUM(CASE zahl4 WHEN 25 THEN 1 END) AS Anzahl4,
      SUM(CASE zahl5 WHEN 25 THEN 1 END) AS Anzahl5,
      SUM(CASE zahl6 WHEN 25 THEN 1 END) AS Anzahl6
  FROM Ziehung
  )_tmp");

echo "Die Zahl 25 wurde ".$row['anzahl']." gezogen";
 
Warum machst du zum selben Thema mehrere Threats (siehe https://www.tutorials.de/threads/anzahl-der-lottozahlen-ausgeben.406378/#post-2103233) auf?

Da du in diesem Query nur nach der 25 suchst und in deiner DB (laut Screenshot von dem oben genannten Post) sich keine befindet, kommt NULL raus. Die Query müsste wie folgt aussehen:
SQL:
SELECT
     SUM(CASE zahl1 WHEN 25 THEN 1 ELSE 0 END) AS Anzahl1,
     SUM(CASE zahl2 WHEN 25 THEN 1 ELSE 0 END) AS Anzahl2,
     SUM(CASE zahl3 WHEN 25 THEN 1 ELSE 0 END) AS Anzahl3,
     SUM(CASE zahl4 WHEN 25 THEN 1 ELSE 0 END) AS Anzahl4,
     SUM(CASE zahl5 WHEN 25 THEN 1 ELSE 0 END) AS Anzahl5,
     SUM(CASE zahl6 WHEN 25 THEN 1 ELSE 0 END) AS Anzahl6
FROM Ziehung
)_tmp");

http://sqlfiddle.com/#!9/904b6b/5

Nur mal so eine Anmerkung: Hier betrachtest du nur Lotto 6aus49. Wird perspektivisch auch Eurojackpot und Keno interessant? Wenn ja, sollen die Gewinnzahlen in die gleiche Tabelle geschrieben werden oder in alternative? Du hast nur das Datum stehen. Brauchst du noch die Info nach der Spielart Lotto MI / Lotto SA? Was ist mit den Zusatzspielarten (Spiel77/Super6) bzw Glücksspirale. Ich weiß nicht, was das Ziel des Projektes ist, kann es einen gewaltigen Rattenschwanz mit sich ziehen?
 
Hi Kalito,

das Bild meiner Datenbank ist nur ein Ausschnitt. Es bestehen dort fast 500 Zeilen, wo die 25 natürlich des öfteren vorkommt. Dennoch bekomme ich kein Resultat.

Ich möchte nur eine Tabelle erstellen, wo sie Lottozahlen 1-49 in meiner Datenbank nach Häufigkeit der Lottozahlen ausgegeben werden und die Zahl mit der häufigsten Anzahl oben steht.
Siehe Beispiel..
Deinen o.g. Code habe ich doch eingebunden, leider ohne Erfolg. Benötige ich da nicht noch ein Echo ?
 

Anhänge

  • Bildschirmfoto 2018-02-07 um 09.34.52.png
    Bildschirmfoto 2018-02-07 um 09.34.52.png
    37,7 KB · Aufrufe: 3
Man muss das ganze jetzt mal systematisch durchgehen.

  1. Was kommt heraus, wenn ich die SQL auf der DB ausführe
  2. In deinem lezten Code-Bsp fehlt der execute-statement. Ist dies gesetzt?
 
ich habe jetzt folgendes Versucht..

PHP:
$pdo = new PDO('mysql:host=xxx;dbname=DBxxx', 'Ixxx', 'xxx');

$statement = $pdo->prepare("SELECT SUM(Anzahl1+Anzahl2+Anzahl3+Anzahl4+Anzahl5+Anzahl6) AS Anzahl FROM (
SELECT
     SUM(CASE zahl1 WHEN 25 THEN 1 END) AS Anzahl1,
     SUM(CASE zahl2 WHEN 25 THEN 1 END) AS Anzahl2,
     SUM(CASE zahl3 WHEN 25 THEN 1 END) AS Anzahl3,
     SUM(CASE zahl4 WHEN 25 THEN 1 END) AS Anzahl4,
     SUM(CASE zahl5 WHEN 25 THEN 1 END) AS Anzahl5,
     SUM(CASE zahl6 WHEN 25 THEN 1 END) AS Anzahl6
FROM Ziehung
)_tmp");
$statement->execute(array('25'));
$row = $statement->fetch();
echo "Die Zahl 25 wurde ".$row['Anzahl']." gezogen<br />";

Bei diesem Beispiel wird tatsächlich die Anzahl ausgegeben.

Wenn ich aber z.B. folgendes eingebe..

PHP:
$pdo = new PDO('mysql:host=xxx;dbname=DBxxx', 'Ixxx', 'xxx');

$statement = $pdo->prepare("SELECT SUM(Anzahl1+Anzahl2+Anzahl3+Anzahl4+Anzahl5+Anzahl6) AS Anzahl FROM (
SELECT
     SUM(CASE zahl1 WHEN 2 THEN 1 END) AS Anzahl1,
     SUM(CASE zahl2 WHEN 2 THEN 1 END) AS Anzahl2,
     SUM(CASE zahl3 WHEN 2 THEN 1 END) AS Anzahl3,
     SUM(CASE zahl4 WHEN 2 THEN 1 END) AS Anzahl4,
     SUM(CASE zahl5 WHEN 2 THEN 1 END) AS Anzahl5,
     SUM(CASE zahl6 WHEN 2 THEN 1 END) AS Anzahl6
FROM Ziehung
)_tmp");
$statement->execute(array('2'));
$row = $statement->fetch(); 

echo "Die Zahl 2 wurde ".$row['Anzahl']." gezogen<br />";

wird das ".$row['Anzahl']." nicht ausgegeben.
 
Jetzt funktioniert es..
Auch wenn ich 2 Zahlen aufrufen möchte..

PHP:
$statement = $pdo->prepare("SELECT SUM(Anzahl1+Anzahl2+Anzahl3+Anzahl4+Anzahl5+Anzahl6) AS Anzahl FROM (
SELECT
     SUM(CASE zahl1 WHEN 25 THEN 1 ELSE 0 END) AS Anzahl1,
     SUM(CASE zahl2 WHEN 25 THEN 1 ELSE 0 END) AS Anzahl2,
     SUM(CASE zahl3 WHEN 25 THEN 1 ELSE 0 END) AS Anzahl3,
     SUM(CASE zahl4 WHEN 25 THEN 1 ELSE 0 END) AS Anzahl4,
     SUM(CASE zahl5 WHEN 25 THEN 1 ELSE 0 END) AS Anzahl5,
     SUM(CASE zahl6 WHEN 25 THEN 1 ELSE 0 END) AS Anzahl6
FROM Ziehung
)_tmp");
$statement->execute(array('25'));
$row25 = $statement->fetch();
echo "Die Zahl <span style='color:red;'>25</span> wurde insgesamt <span style='color:green;'>".$row25['Anzahl']."</span> mal gezogen<br />";

echo "<br /><hr /><br />";



$statement = $pdo->prepare("SELECT SUM(Anzahl1+Anzahl2+Anzahl3+Anzahl4+Anzahl5+Anzahl6) AS Anzahl FROM (
SELECT
     SUM(CASE zahl1 WHEN 26 THEN 1 ELSE 0 END) AS Anzahl1,
     SUM(CASE zahl2 WHEN 26 THEN 1 ELSE 0 END) AS Anzahl2,
     SUM(CASE zahl3 WHEN 26 THEN 1 ELSE 0 END) AS Anzahl3,
     SUM(CASE zahl4 WHEN 26 THEN 1 ELSE 0 END) AS Anzahl4,
     SUM(CASE zahl5 WHEN 26 THEN 1 ELSE 0 END) AS Anzahl5,
     SUM(CASE zahl6 WHEN 26 THEN 1 ELSE 0 END) AS Anzahl6
FROM Ziehung
)_tmp");
$statement->execute(array('26'));
$row26 = $statement->fetch();
echo "Die Zahl <span style='color:red;'>26</span> wurde insgesamt <span style='color:green;'>".$row26['Anzahl']."</span> mal gezogen<br />";


bleibt nur noch die Frage, ob ich nun für alle 49 Zahlen einen solchen Code schreiben muss, oder gibt es da eine einfachere Lösung
 
Ich möchte mal eine einfache Frage stellen. Versucht du auch mal selber eine Lösung zu erarbeiten bzw. hast dich mal mit PDO auseinander gesetzt? Ich glaube ich spreche hier für die meisten, wenn ich sage, dass wir gerne helfen, aber ein wenig Eigenantrieb kann nicht schaden.

Nun zu deinem Problem. Hier findest du einen kleinen Crashkurs zu PDO. Da findest du deine Antwort.
 

Neue Beiträge

Zurück