Position eines Teams in Tabelle ermitteln

Stimmt, das xy und yz war ja nur ein allgemeiner SQL Befehl als Beispiel :D


aber es erscheint dennoch nur der Else teil:

PHP:
<?php
function getPosition($team){
$sql = "
        SELECT
            pos
        FROM
            (
                SELECT
                    @pos:=@pos+1 AS pos,
                    fifa_m.name
                FROM
                    (SELECT @pos:=0) AS vars,
                    fifa_mannschaften AS fifa_m
                ORDER BY
                    fifa_m.punkte DESC
                    ) AS rangliste
        WHERE
            rangliste.name = '{$team}'";  
    $result = mysql_query($sql);
    return mysql_result($result, 0); 
} 

$selectedTeam = 'Borussia Dortmund';
$pos = getPosition($selectedTeam);


    
    if($pos=="13") {
        
        echo 'Du hast deinen erhofften Platz ('.$pos.') erreicht'; } else {
            
        echo 'Du hast dein ziel nicht erreicht.';
        }

?>
 
Dazu kann es 2 Gründe geben.
1) die Position ist nicht 13
2) wir haben einen Fehler im SQL-Statement

Beides kannst du per debug innerhalb der Funktion herausfinden.
PHP MySQL Debug Queries
Teste mal dein generiertes SQL und poste es hier. Dann sehen wir ev. weitere Fehler.
 
Also der Tabellenplatz ist definitiv 13.

habe nun alle mir bekannten debug methoden eingesetzt:

PHP:
<?php
error_reporting(E_ALL);
function getPosition($team){
$sql = "
        SELECT
            pos
        FROM
            (
                SELECT
                    @pos:=@pos+1 AS pos,
                    fifa_m.name
                FROM
                    (SELECT @pos:=0) AS vars,
                    fifa_mannschaften AS fifa_m
                ORDER BY
                    fifa_m.punkte DESC
                    ) AS rangliste
        WHERE
            rangliste.name = '{$team}'";  
    $result = mysql_query($sql);
echo "{$sql}\n";
echo mysql_error();
    return mysql_result($result, 0); 
} 

$selectedTeam = 'Borussia Dortmund';
$pos = getPosition($selectedTeam);


    
    if($pos=="12") {
        
        echo 'Du hast deinen erhofften Platz ('.$pos.') erreicht'; } else {
            
        echo 'Du hast dein ziel nicht erreicht.';
        }

?>

Ausgabe ist folgende:
Code:
SELECT pos FROM ( SELECT @pos:=@pos+1 AS pos, fifa_m.name FROM (SELECT @pos:=0) AS vars, fifa_mannschaften AS fifa_m ORDER BY fifa_m.punkte DESC ) AS rangliste WHERE rangliste.name = 'Borussia Dortmund' Du hast dein ziel nicht erreicht.


EDIT:


Wenn ich das debuggen nach der Funktion mache erscheint folgendes:

Resource id #148
 
Ich habe die Abfrage nun nochmal etwas geändert und identifiziere die Teams nun durch ihre ID.

Die id 68 steht für den AC Mailand. Dieser belegt den Platz 10.
Die abfrage funktioniert und es kommt die richtige Ausgabe.

Bei allen anderen Teams geht dies ebenfalls, nur bei der Teamid 2 (Borussia Dortmund) mit platz 13 nicht.

Es ist aber definitiv platz 13.


PHP:
<?php
error_reporting(E_ALL);
function getPosition($team){
$sql = "
        SELECT
            pos
        FROM
            (
                SELECT
                    @pos:=@pos+1 AS pos,
                    fifa_m.id
                FROM
                    (SELECT @pos:=0) AS vars,
                    fifa_mannschaften AS fifa_m
                ORDER BY
                    fifa_m.punkte DESC
                    ) AS rangliste
        WHERE
            rangliste.id = '{$team}'";  
    $result = mysql_query($sql);

    return mysql_result($result, 0);

} 

$selectedTeam = '68';
$pos = getPosition($selectedTeam);

 echo "{$sql}\n";
echo mysql_error();
    
    if($pos=="10") {
        
        echo 'Du hast deinen erhofften Platz ('.$pos.') erreicht'; } else {
            
        echo 'Du hast dein ziel nicht erreicht.';
        }

?>
 
Weil die 13 Unglück bringt.... Ne, Blödsinn.
Zuerst vornweg. Die ID wirst du warscheinlich als Zahl in der Datenbank definiert haben. Dann solltest du sie im SQL auch wie eine Zahl behandeln. Also weg mit den '
SQL:
rangliste.id = {$team}

Da geht wirklich nur noch eines. Rein in die Datenbank
Sind die Daten geheim? Ansonsten kannst du mal ein Tabellenexport als SQL (inkl. Create Table) über phpMyAdmin machen. Dann könnte ich das selber mal durchtesten. Irgendwas ist da komisch.

Achja, ein var_dump() auf $pos könntest du noch versuchen - mal schauen was für eine Position gibts da an.

Eine weitere Idee: Kann es sein, dass mehrere Teams die gleiche Punktzahl haben? Dann müssen wir die Sortierung erweitern, da e sonst Glücksache ist, welches der Teams mit gleicher Punktezahl welchen Rang belegt.
 
Zuletzt bearbeitet von einem Moderator:
Ok, also bei var_dump gibt er mir für Borussia Dortmund (id 2) die $pos = 16 aus. Sie muss aber definitiv 13 sein. So ist es auch in der tabelle angezeigt.


ich schicke dir die mysql per PN.


Die sortierung habe ich geändert.

PHP:
<?php
error_reporting(E_ALL);
function getPosition($team){
$sql = "
        SELECT
            pos
        FROM
            (
                SELECT
                    @pos:=@pos+1 AS pos,
                    fifa_m.id
                FROM
                    (SELECT @pos:=0) AS vars,
                    fifa_mannschaften AS fifa_m
                ORDER BY
                    fifa_m.punkte DESC, fifa_m.tordifferenz DESC, fifa_m.tore DESC, fifa_m.spiele DESC, fifa_m.siege DESC, fifa_m.unentschieden DESC, fifa_m.gegentore ASC
                    ) AS rangliste
        WHERE
            rangliste.id = '{$team}'";  
    $result = mysql_query($sql);

    return mysql_result($result, 0);

} 

$selectedTeam = '2';
$pos = getPosition($selectedTeam);

 var_dump($pos);
echo "{$sql}\n";
echo mysql_error();
    
    if($pos=="13") {
        
        echo 'Du hast deinen erhofften Platz ('.$pos.') erreicht'; } else {
            
        echo 'Du hast dein ziel nicht erreicht.';
        }

?>
 
Sorry, mein Fehler! Habs dank der Tabelle gefunden. In meiner ausfürhlichen Beschreibung habe ich den 1. Liga-Filter erwähnt und mal drin. Aber nachher im Schluss-SQL-Statement wieder vergessen. Oh mann, wo hatte ich blos mein Kopf

PHP:
$sql = "SELECT
            pos
        FROM
            (
                SELECT
                    @pos:=@pos+1 AS pos,
                    fifa_m.id
                FROM
                    (SELECT @pos:=0) AS vars,
                    fifa_mannschaften AS fifa_m
                WHERE
                    fifa_m.liga = '1. Euroliga'
                ORDER BY
                    fifa_m.punkte DESC, 
                    fifa_m.tordifferenz DESC, 
                    fifa_m.tore DESC, 
                    fifa_m.spiele DESC, 
                    fifa_m.siege DESC, 
                    fifa_m.unentschieden DESC, 
                    fifa_m.gegentore ASC
            AS rangliste
        WHERE
            rangliste.id = {$id};";

Und noch zum wissen: Wie ich das herausgefunden habe? Ich habe das innere SQL mit * erweitert undlaufen lassen um die gesammte Rangliste anzuschauen und schon habe ich gesehen
SQL:
-- Mein Testscript
SELECT
    @pos:=@pos+1 AS pos,
    fifa_m.*
FROM
    (SELECT @pos:=0) AS vars,
    fifa_mannschaften AS fifa_m
-- Zuerst ohne den WHER-Teil. Da war die ID dann auf Rang 16 und 2-Liga Gruppen weiter vorn
WHERE
    fifa_m.liga = '1. Euroliga'
ORDER BY
     fifa_m.punkte DESC, 
    fifa_m.tordifferenz DESC, 
    fifa_m.tore DESC, 
    fifa_m.spiele DESC, 
    fifa_m.siege DESC, 
    fifa_m.unentschieden DESC, 
    fifa_m.gegentore ASC

Du kannst das Script das du mir zur Verfügung gestellt hast wieder entfernen.
 
Zuletzt bearbeitet von einem Moderator:
Ok, vielen dank. Aber irgenetwas habe ich ejtzt wieder übersehen.. :S

PHP:
<?php
error_reporting(E_ALL);
function getPosition($team){
$sql = "SELECT
            pos
        FROM
            (
                SELECT
                    @pos:=@pos+1 AS pos,
                    fifa_m.id
                FROM
                    (SELECT @pos:=0) AS vars,
                    fifa_mannschaften AS fifa_m
                WHERE
                    fifa_m.liga = '1. Euroliga'
                ORDER BY
                    fifa_m.punkte DESC, 
                    fifa_m.tordifferenz DESC, 
                    fifa_m.tore DESC, 
                    fifa_m.spiele DESC, 
                    fifa_m.siege DESC, 
                    fifa_m.unentschieden DESC, 
                    fifa_m.gegentore ASC
            AS rangliste
        WHERE
            rangliste.id = {$id};";  
    $result = mysql_query($sql);

    return mysql_result($result, 0);

} 

$selectedTeam = '2';
$pos = getPosition($selectedTeam);

 var_dump($pos);
echo "{$sql}\n";
echo mysql_error();
    
    if($pos=="13") {
        
        echo 'Du hast deinen erhofften Platz ('.$pos.') erreicht'; } else {
            
        echo 'Du hast dein ziel nicht erreicht.';
        }

?>

Ausgabe:
Code:
Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /srv/www/httpd/phost/f/com/pytalhost/fifaplace/web/fifaliga/viewpage.php(35) : eval()'d code on line 29
bool(false) Resource id #148 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS rangliste WHERE rangliste.id = 2' at line 21Du hast dein ziel nicht erreicht.
 
Oh mann - heute sollte ich echt niemandem helfen - so viele C&P-Fehler die ich mache (muss ja jeweils das ganze wieder so anpassen dass es in den Code passt)

Dieses mal ist es ein )
SQL:
-- ersetze
            AS rangliste
-- durch
            ) AS rangliste
 
Zuletzt bearbeitet von einem Moderator:
Zurück