Antworten auf deine Fragen:
Neues Thema erstellen

Bundesliga Tippspiel

r3nt5ch3r

~ Allround pG ~

AW: Bundesliga Tippspiel

"WHERE spieltag = 1';"

gibt es eine Spalte "spieltag" überhaupt? Die hast du nicht erwähnt... poste doch bitte noch deine Datenbank mit ein paar Testdaten... hellsehen ist noch nicht möglich xD
 

redbull2906

Nicht mehr ganz neu hier

AW: Bundesliga Tippspiel

wie poste ich denn hier ne DB??

Aber ja Spalte Spieltag gibt es sorry hatte ich vergessen - gehört als spalte in die Tabelle "Spieltag"
 

redbull2906

Nicht mehr ganz neu hier

AW: Bundesliga Tippspiel

So hier mal meine DB mit ein paar Inhalten.
Code:
--
-- Tabellenstruktur für Tabelle `tipps`
--

CREATE TABLE IF NOT EXISTS `tipps` (
  `id` int(2) NOT NULL auto_increment,
  `spiel_id` int(11) NOT NULL,
  `tipper_id` int(11) NOT NULL,
  `tipph` int(11) NOT NULL,
  `tippg` int(11) NOT NULL,
  `punkte` int(11) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci AUTO_INCREMENT=117 ;

--
-- Daten für Tabelle `tipps`
--

INSERT INTO `tipps` (`id`, `spiel_id`, `tipper_id`, `tipph`, `tippg`, `punkte`) VALUES
(116, 15, 1, 121, 5, 0),
(115, 13, 2, 21, 2, 0),
(114, 8, 3, 1, 21, 0),
(113, 9, 0, 21, 2, 0),
(112, 10, 0, 1, 21, 0),
(111, 11, 0, 1, 2, 0);

-- Tabellenstruktur für Tabelle `spieltag`
--

CREATE TABLE IF NOT EXISTS `spieltag` (
  `spiel_id` int(11) NOT NULL auto_increment,
  `spieltag` int(2) NOT NULL,
  `heim` varchar(50) collate utf8_general_ci NOT NULL,
  `gast` varchar(50) collate utf8_general_ci NOT NULL,
  `tore_h` int(2) NOT NULL,
  `tore_g` int(2) NOT NULL,
  `datum` datetime NOT NULL,
  PRIMARY KEY  (`spiel_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci AUTO_INCREMENT=16 ;

--
-- Daten für Tabelle `spieltag`
--

INSERT INTO `spieltag` (`spiel_id`, `spieltag`, `heim`, `gast`, `tore_h`, `tore_g`, `datum`) VALUES
(1, 1, 'Schalke', 'Dortmund', 2, 1, '2009-05-30 20:30:00'),
(14, 1, 'Stuttgart', 'Hoffenheim', 2, 1, '2009-05-30 20:30:00'),
(12, 1, 'Wolfsburg', 'Berlin', 1, 2, '2009-05-30 20:30:00'),
(11, 1, 'Karlsruhe', 'Frankfurt', 1, 2, '2021-02-20 09:00:00'),
(10, 1, 'M''Gladbach', 'Hannover', 1, 2, '2021-02-20 09:00:00'),
(9, 1, 'Leverkusen', 'Hamburg', 1, 1, '2021-02-20 09:00:00'),
(8, 1, 'Cottbus', 'Bremen', 4, 1, '2021-02-20 09:00:00'),
(13, 1, 'Bielefeld', 'Bochum', 2, 1, '2021-02-20 09:00:00'),
(15, 1, 'Bayern', 'Köln', 2, 2, '2021-02-20 09:00:00');

-- Tabellenstruktur für Tabelle `user`
--

CREATE TABLE IF NOT EXISTS `user` (
  `id` int(11) NOT NULL auto_increment,
  `user` varchar(50) collate utf8_general_ci NOT NULL,
  `password` varchar(50) collate utf8_general_ci NOT NULL,
  `name` varchar(50) collate utf8_general_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci AUTO_INCREMENT=6 ;

--
-- Daten für Tabelle `user`
--

INSERT INTO `user` (`id`, `user`, `password`, `name`) VALUES
(1, 'user1', '1234', 'XY'),
(2, 'user2', '', 'Z'),
(3, 'user3', '', 'W');
 
Zuletzt bearbeitet:

r3nt5ch3r

~ Allround pG ~

AW: Bundesliga Tippspiel

Hab ich jetzt richtig verstanden, dass es am Ende so aussehen soll:
Also Username ganz links einmal, daneben dann jeweiligen Paarungen, auf die der User getippt hat?!

Code:
<table>
<tr>
    <th>Name:</th>
    <th>Paarung 1 - Heimmannschaft</th>
    <th>Paarung 1 - Gastmannschaft</th>
    <th>Paarung 2 - Heimmannschaft</th>
    <th>Paarung 2 - Gastmannschaft</th>
</tr>
<tr>
    <td>username</td>
    <td>tipp 1 heim</td>
    <td>tipp 1 gast</td>
    <td>tipp 2 heim</td>
    <td>tipp 2 gast</td>
</tr>
<tr>
    <td>username 2</td>
    <td>tipp 1 heim</td>
    <td>tipp 1 gast</td>
    <td>tipp 2 heim</td>
    <td>tipp 2 gast</td>
</tr>
</table>
Vorschlag:
PHP:
<?
    $query = 'SELECT heim, gast, spiel_id FROM spieltag WHERE spieltag = 1';
    $cols = array();
    if ($result = mysql_query($query))
        while ($row = mysql_fetch_assoc($result))
            array_push($cols, $row);
    
    echo '<table><tr>';
    echo '<th>User</th>';
    foreach($cols as $col)
        echo '<th>'.$col['heim'].' vs. '.$col['gast'].'</th>';
    echo '</tr>';
    
    
    $query = 'SELECT user.name as name, tipph, tippg, spieltag.spiel_id
              FROM tipps
              LEFT JOIN user ON tipps.tipper_id = user.id
              LEFT JOIN spieltag ON tipps.spiel_id = spieltag.spiel_id
              WHERE spieltag.spieltag = 1';
    if($result = mysql_query($query)) {
        while ($row = mysql_fetch_assoc($result)) {
            echo '<tr>';
            echo '<td>'.$row['name'].'</td>';
            foreach ($cols as $col) {
                if($row['spiel_id'] == $col['spiel_id']){
                    echo '<td>'.$row['tipph'].' - '.$row['tippg'].'</td>';
                }else{
                    echo '<td>-</td>';
                }
            }
            echo '</tr>';
        }
        echo '</table>';
    }  
?>
Ausgabe:


€: hab die Tipps mit tipper_id = 0 mal weggelassen^^
 
Zuletzt bearbeitet:

redbull2906

Nicht mehr ganz neu hier

AW: Bundesliga Tippspiel

Jap, genau wie den HTML-Code soll es später sein - richtig.

Habe den Code mal angewandt - soweit is es das was ich suche nur zum Test hab ich jetzt mal mit der user.id "1" einen kompletten Spieltag getippt - jetzt gibt er mir 9 x untereinander Zeile für Zeile den namen zum user der id "1" aus und quasi in einer diagonalen seine Tipps.

Die Tipps sollten aber wie du ja auch in deinem HTML - Code schon gesagt hast in einer Zeile aufgelistet sein hinter dem namen

Weißte was ich mein?
 

redbull2906

Nicht mehr ganz neu hier

AW: Bundesliga Tippspiel

"GROUP BY" wird mich auch nicht weiterbringen - so habe ich zwar nur 1x den username aber jedoch auch nur den letzten Tipp in der Anzeige

hm....*grübel*
 

r3nt5ch3r

~ Allround pG ~

AW: Bundesliga Tippspiel

PHP:
<?
    $query = 'SELECT heim, gast, spiel_id FROM spieltag WHERE spieltag = 1';
    $cols = array();
    if ($result = mysql_query($query))
        while ($row = mysql_fetch_assoc($result))
            array_push($cols, $row);
    
    echo '<table><tr>';
    echo '<th>User</th>';
    foreach($cols as $col)
        echo '<th>'.$col['heim'].' vs. '.$col['gast'].'</th>';
    echo '</tr>';
    
    
    
    $query = 'SELECT user.name as name, tipph, tippg, spieltag.spiel_id, tipper_id
              FROM tipps
              LEFT JOIN user ON tipps.tipper_id = user.id
              LEFT JOIN spieltag ON tipps.spiel_id = spieltag.spiel_id
              WHERE spieltag.spieltag = 1';
    $result = mysql_query($query);
    
    $bla = array();
    while ($row = mysql_fetch_assoc($result)) {
        $bla[$row['tipper_id']][$row['spiel_id']] = $row;
    }
    
    foreach($bla as $array){
        ksort($array);
        $newBla[] = $array;
    }
    
    foreach ($newBla as $tipperID => $array) {
        echo '<tr>';
        foreach($array as $spielID => $row){
            echo '<td>'.$row['name'].'</td>';
            foreach ($cols as $col) {
                if(isset($array[$col['spiel_id']])){
                    echo '<td>'.$array[$col['spiel_id']]['tipph'].' - '.$array[$col['spiel_id']]['tippg'].'</td>';
                }else{
                    echo '<td>-</td>';
                }
            }
            break;
        }
        echo '</tr>';
    }
    echo '</table>';    
?>

Da blick ich fast nicht mehr durch, ich kann dir nur OOP empfehlen um sowas zu vermeiden xD
 

redbull2906

Nicht mehr ganz neu hier

AW: Bundesliga Tippspiel

YEEESSS - Danke - vielen vielen Dank - jetzt passt des.

Hab auf die schnelle nur mal den Code getestet werde mich mal durchlesen damit ich auch versteh was genau da gemacht wird. Bei den Arrays tu ich mir echt noch schwer irendwie.

Nochmals vielen vielen Dank.

hoff ich darf, falls noch Fragen dazu da sind, diese dir stellen ;)
 

r3nt5ch3r

~ Allround pG ~

AW: Bundesliga Tippspiel

Hab auf die schnelle nur mal den Code getestet werde mich mal durchlesen damit ich auch versteh was genau da gemacht wird. Bei den Arrays tu ich mir echt noch schwer irendwie.

Joa, ist net so einfach mit dem mehrdimensionalen Zeugs xD

hoff ich darf, falls noch Fragen dazu da sind, diese dir stellen

Wenn diese nicht überflüssig sind und du dich davor damit richtig beschäftigt hast, kannste das gerne tun^^
 

redbull2906

Nicht mehr ganz neu hier

AW: Bundesliga Tippspiel

Ich nu wieder ;)

Habe bezgl. meinem Bundesligatippspiel jetzt noch eine Rangliste für die Mitspieler generiert.

Hier mal mein code
PHP:
<?
$spieltag=1;
echo 'Rangliste für den '.$spieltag.'. Spieltag';

$query = 'SELECT user.name as name, SUM(punkte) as punkt
              FROM tipps
              LEFT JOIN user ON tipps.tipper_id = user.id
              LEFT JOIN spieltag ON tipps.spiel_id = spieltag.spiel_id
              WHERE spieltag.spieltag = '.$spieltag.'
              GROUP BY name
              ORDER BY punkt DESC, name';
              
$ergebnis=mysql_query($query);

echo '<table>';
echo '<tr><th>Platz</th><th>Name</th><th>Punkte</th></tr>';
$p=1; //Platzvariable
$i=0;
while($row=mysql_fetch_assoc($ergebnis)){
    if($i%2==0) { 
        $classname = ""; 
    }
    else {
        $classname = " class=\"zeile\"";
    }
    echo '<tr'.$classname.'><td>'.$p++.'</td><td>'.$row['name'].'</td><td>'.$row['punkt'].'</td><td>'.$row['pkt'].'</td></tr>';
$i++;
}
echo '</table>';

?>

Soweit so gut - ich würde aber gerne noch abfragen wer die meisten "3 Punkte" - insgesamt und pro Spieltag - hat und dann dies in meine Ranglistenberechnung mit einbeziehen.

Hatte meine Sql-Abfrage schon mal so aufgebaut
PHP:
$query = 'SELECT user.name as name,COUNT(punkte = 3) as gespkt, SUM(punkte) as punkt
              FROM tipps
              LEFT JOIN user ON tipps.tipper_id = user.id
              LEFT JOIN spieltag ON tipps.spiel_id = spieltag.spiel_id
              WHERE spieltag.spieltag = '.$spieltag.'
              GROUP BY name
              ORDER BY punkt DESC, gespkt DESC, name';

Aber leider führte das auch nicht zu dem gewünschten Ergebniss - Hat vllt. einer noch ne Idee wie ich das mit den "meisten 3 Punkten" noch in die Ausgabe mit einberechnen kann?
 

redbull2906

Nicht mehr ganz neu hier

AW: Bundesliga Tippspiel

Hallo,

ich dachte eigentlich ich müsste in dieses Thread keine Fragen mehr stellen aber leider hab ich bis dato diese hier:

Ich versuche mit folgendem Script die Punkte pro Tipp der einzelnen Spieler zu berechnen.
PHP:
$anzahl=count($_POST['heim']);
            for($a=0;$a<$anzahl;$a++)
            {
            $id=$_POST['id'][$a];
            $abfrage = "SELECT * FROM tipps WHERE spiel_id = ".$id."";
            $ergebnis = mysql_query($abfrage);
            $row=mysql_fetch_array($ergebnis);
            $realHeim=$_POST['heim'][$a];
            $realGast=$_POST['gast'][$a];
            $real=$realHeim - $realGast;
            $tippHeim=$row['tipph'][$a];
            $tippGast=$row['tippg'][$a];
            $getippt=$tippHeim-$tippGast;
            // Tipp genau richtig
            if($realHeim == $tippHeim && $realGast == $tippGast) $punkte = 3;
            // unentschieden gespielt, unentschieden getippt
            elseif($realHeim == $realGast && $tippHeim == $tippGast) $punkte = 1;
            // Tendenz gleich
            elseif($real > 0 && $getippt > 0 || $real < 0 && $getippt < 0) $punkte = 1;
            // garnichts richtig
            else $punkte = 0;
            echo $punkte;
            $aendern = "UPDATE tipps SET punkte=$punkte WHERE spiel_id =".$id."";
            $update=mysql_query($aendern);
            }

Die Ergebnisse übertrage ich mit einem Formular das so aussieht
PHP:
<form action="<? print $PHP_SELF ?>" method="post">
<?
echo '<table><thead><tr><th>Heim</th><td></td><th>Gast</th><th colspan="2">Ergebniss</th></tr></thead>';
echo '<tbody>';
    while($row=mysql_fetch_array($ergebnis))
    {
    echo '<tr><td>'.$row["heim"].'</td><td>:</td><td>'.$row["gast"].'</td><td><input type="text" size="2" maxlength="1" name="heim['.$i.']" /><input type="hidden" name="id['.$i.']" value="'.$row["spiel_id"].'" /><input type="hidden" name="mannh['.$i.']" value="'.$row["heim"].'" /></td>
    <td><input type="text" size="2" maxlength="1" name="gast['.$i.']" /><input type="hidden" name="id['.$i.']" value="'.$row["spiel_id"].'" /><input type="hidden" name="manng['.$i.']" value="'.$row["gast"].'" /></td></tr>';
    $i++;
    }
echo '</tbody>';
echo '</table>';
echo '<input type="submit" name="Send" value="Absenden" />';
echo '</form>';

Die Berechnung funktioniert soweit.

Problem ist dass ich nachher in der DB bei jedem user (z.Zt. 3) immer die selben Punkte habe - gespielt wurde 4:1 der eine tippt 2:1 und erhält drei punkte (dürfte nur 1 punkte bekommen) der andere tippt 1:1 und erhält auch drei Punkte (dürfte nur 0 Punkte bekommen).

Wo liegt mein Fehler? ich blicks einfach net!
 

redbull2906

Nicht mehr ganz neu hier

AW: Bundesliga Tippspiel

Hat denn keiner eine Idee oder nen kleinen Tipp wie ich die Schleife aufbauen muss damit er mir für jeden Tipper seine Punkte berechnet?
 

r3nt5ch3r

~ Allround pG ~

AW: Bundesliga Tippspiel

Geb doch einfach ma die Variablen aus ($realHeim, $tippHeim,$realGast,$tippGast) und schau dir die Werte an...
 

redbull2906

Nicht mehr ganz neu hier

AW: Bundesliga Tippspiel

Er zieht nur die Werte für einen Spieler und macht dann mit der Punktberechnung ein Update für alle andern Spieler.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.635
Beiträge
1.538.476
Mitglieder
67.559
Neuestes Mitglied
hanuta
Oben