ERLEDIGT
JA
JA
ANTWORTEN
19
19
ZUGRIFFE
309
309
EMPFEHLEN
-
Hallo Leute,
ich lasse mit PHP / MYSQL eine Fußballtabelle generieren, welche alle Teams der Tabelle "fifa_mannschaften" auflistet, die in der "1. Euroliga" spielen.
Ich bestimme anschließend die Position mit der variabel $pos. Unter andere auch damit aufstiegsplätze etc. farblich markiert werden können.
Code:
Nun möchte ich außerhalb dieses Scripts auch die Position eines Teams ermitteln. Da die Position nicht in der MYSQL tabelle gespeichert wirdm weiß ich nicht genau, wie ich es machen soll.PHP-Code:$colors = array_fill(1, 1,'#7F99FF')
+ array_fill(2, 2, '#00CC33')
+ array_fill(4, 3, '#99E500')
+ array_fill(7, 6, '')
+ array_fill(13, 2, '#FF0000');
//Die Position definieren
$pos=0;
while($row_bl = mysql_fetch_object($ergebnis_bl))
{
$td = $row_bl->tore - $row_bl->gegentore;
$abfrage_spieler = 'SELECT * FROM fusionafdce_users WHERE user_name = "'.$row_bl->besitzer.'"';
$ergebnis_spieler = mysql_query($abfrage_spieler);
while($rowbesitzer = mysql_fetch_object($ergebnis_spieler))
{
$icqbesitzer = $rowbesitzer->user_icq;
}
echo '<tr>
<td bgcolor="'.$colors[++$pos].'" width="31" align="left">'.$pos.'</td>
<td bgcolor="'.$colors[$pos].'" width="39" align="left"><img src="image/vereine/'.$row_bl->id.'.png"></td>
<td bgcolor="'.$colors[$pos].'" width="139" align="left"><a href="?page_id=28&verein='.$row_bl->id.'">'.$row_bl->name.'</a></td>
<td bgcolor="'.$colors[$pos].'" width="99" align="left">';
if($row_bl->besitzer=="") {
echo ''.$row_bl->besitzer.''; } else {
echo '<img src="http://online.mirabilis.com/scripts/online.dll?icq='.$icqbesitzer.'&img=5">'.$row_bl->besitzer.''; }
echo '</td>
<td bgcolor="'.$colors[$pos].'" width="42" align="left">'.$row_bl->spiele.'</td>
<td bgcolor="'.$colors[$pos].'" width="30" align="left">'.$row_bl->siege.'</td>
<td bgcolor="'.$colors[$pos].'" width="30" align="left">'.$row_bl->unentschieden.'</td>
<td bgcolor="'.$colors[$pos].'" width="30" align="left">'.$row_bl->niederlagen.'</td>
<td bgcolor="'.$colors[$pos].'" width="60" align="left">'.$row_bl->tore.':'.$row_bl->gegentore.'</td>
<td bgcolor="'.$colors[$pos].'" width="36" align="left">'.$td.'</td>
<td bgcolor="'.$colors[$pos].'" width="54" align="left">'.$row_bl->punkte.'</td>
</tr>';
}
Es soll ein script werden, ala:
Code :1 2 3 4
if($pos_team == $erhoffte_position) { belohne das team } else { bestrafe das team }
Ich hoffe ihr könnt mir da weiterhelfen und habt verstanden, was ich erreichen möchte
Danke im vorraus!
-
Jepp. Du kannst das alles einem einzigen SQL machen.
1) nach Punkten sortieren
2) durchnummerieren (die Psotitionen definieren)
3) Eine Position geziehlt auslesen
Man muss dabei auf Unterabfragen und SQL-Variablen zugreiffen, da MySQL keine RownUm kennt. Ich verende als Basis die folgende Rownum-Methode: [MySQL] Rownum (Zeilennummer)
Hier ein Beispiel wie du die Mansnchaft 'FC Hinterpfufigen'
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
SELECT pos FROM -- Die soriterte und durchnummerierte Liste: ( SELECT @pos:=@pos+1 AS pos, fifa_m.mannschaft FROM -- Initialisierend er Varable (SELECT @pos:=0) AS vars, fifa_mannschaften AS fifa_m ORDER BY fifa_m.punkte DESC ) AS rangliste WHERE mannschaft = 'FC Hintepfufigen'
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Hey,
danke für die fixe antwort
Ich verstehe teilweise, was du mir dort aufgeschrieben hast. aber nicht alles.
"Select pos" kann doch nicht funktionieren, da ich keine spalte "pos" habe oder?
und kann man das verallgemeiner für alle Teams, wo die spalte "liga" = "1. Euroliga" ist?
Und wo kommt dann die anweisung hin, von dir ich am anfang gesprochen habe?
-
Also, pos hast du.
Auch die 3 Anweisungen sind alle in diesem SQL drin. Einzig der Filter auf die 1. Liga nicht.
Ich zerleg das SQL mal und erkläre es dir
Als erstes erstellen wir ein SQL das uns die Variable definiert, die wir brauchen um die Position zu bestimmen.
In MySQL beginnen Variablen immer mit einem @. Wenn man einer Variable einen Wert zuschreiben möchte, dann geht das über :=
Und so initialisiere ich die Variable @pos mit dem Wert 0 (gibt so ausgeführt genau eine Zeile mit einem Feld un dem Wert 0)
Dieses kombiniere ich nun mit deiner fifa_mannschaften Tabelle und sortieren sie nach den Punkten. Zudem baue ich hier den Filter ein um die 1. Liga zu bekommen.Code sql:1
SELECT @pos:=0
Noch haben wir keine Position. Dafür alle Manschaften über die die Position bestimmt wird in der richtigen Reihenfolge.Code sql:1 2 3 4 5 6 7 8 9 10 11 12
SELECT fifa_m.mannschaft FROM -- Zusammenführung der Variablen-Tabelle und deinen (SELECT @pos:=0) AS vars, fifa_mannschaften AS fifa_m -- Filterung der 1. Liga WHERE fifa_m.liga = '1. Euroliga' -- Sortierung auf die Punktzahl absteigend ORDER BY fifa_m.punkte DESC
MySQL geht mit den Variablen nun so um wie Excel mit seinen Formeln. Also von Oben nach Unten. Der Erste Datensatz kommt zuerst, dann der Zweite undsoweiter. Innerhalb eines Datensatzes von Links nch Rechts. Zuerst kommt die erste Spalte, dann die Zweite etc.
Innerhalb der Zeile ud jeder Spalte kann die Variable verändert werden und behält dann Zeilen- und Spaltenübergreifned seinen Wert bis er wieder neu mittels := geändert wird. Dies geschieht erst nach der Filterung und nach der Sortierung.
Unsere Variable @pos hat also vorerst den Wert 0. Nun wollen wir in der ersten Zeile den Wert 1. In der ZWeiten den Wert 2 etc.
Wenn wir also in unserem Resultat jedesmal den Wert von @pos um 1 erhöhen, dann haben wir die Position der Manschaft innerhalb der Rangliste
Also sieht die Rangliste so ausCode sql:1 2 3
-- Mit dieser Zeile wird die Position um eines erhöht -- und gleichzeitig unter dem Alias pos im Resultat ausgegeben @pos:=@pos+1 AS pos
Dies gibt die Mannschaften und ihre Postitionen aus.Code sql:1 2 3 4 5 6 7 8 9 10
SELECT @pos:=@pos+1 AS pos, fifa_m.mannschaft FROM (SELECT @pos:=0) AS vars, fifa_mannschaften AS fifa_m WHERE fifa_m.liga = '1. Euroliga' ORDER BY fifa_m.punkte DESC
Von diesem Resultat willst du die Position der Mannschaft abc haben. Ergo nimmst du dieses SQL als Quelle für ein neues SELECT-Statement
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
-- Allgemeines Subquery-Konstrukt: SELECT yz.* FROM (SELECT * FROM xy) AS yz; -- Das ganez auf uns andewandt SELECT pos FROM -- Die soriterte und durchnummerierte Liste: ( SELECT @pos:=@pos+1 AS pos, fifa_m.mannschaft FROM (SELECT @pos:=0) AS vars, fifa_mannschaften AS fifa_m ORDER BY fifa_m.punkte DESC ) AS rangliste WHERE rangliste.mannschaft = 'abc'
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Also für das Team Borussia Dortmund wäre folgendes Script richtig:
PHP-Code:<?php
// Allgemeines Subquery-Konstrukt:
$mysql="SELECT
pos
FROM
(
SELECT
@pos:=@pos+1 AS pos,
fifa_m.mannschaft
FROM
(SELECT @pos:=0) AS vars,
fifa_mannschaften AS fifa_m
ORDER BY
fifa_m.punkte DESC
) AS rangliste
WHERE
rangliste.mannschaft = 'Borussia Dortmund'";
if($pos >= "2" AND $pos <= "5") {
echo 'Du hast deinen erhofften Platz ('.$pos.') erreicht'; } else {
echo 'Du hast dein ziel nicht erreicht.';
}
?>
-
Fast. Du musst $mysql noch auswerten mit mysql_query() und mysql_fetch_assco() oder mysql_result()
Zudem solltest du den Teamnamen als Variabel übergeben - besser für die Zukunft.
Und falls du das an mehreren Orten in deinem Code brauchst, schreibe eine Funktion
PHP-Code:$selectedTeam = 'Borussia Dortmund';
$pos = getPosition($selectedTeam);
function getPosition($team){
$sql = "
SELECT
yz.*
FROM
(SELECT * FROM xy) AS yz;
SELECT
pos
FROM
(
SELECT
@pos:=@pos+1 AS pos,
fifa_m.mannschaft
FROM
(SELECT @pos:=0) AS vars,
fifa_mannschaften AS fifa_m
ORDER BY
fifa_m.punkte DESC
) AS rangliste
WHERE
rangliste.mannschaft = '{$team}'";
$result = mysql_query($sql);
return mysql_result($result, 0);
}
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Ok,
also bei Funktionen etc. bin ich noch nicht so bewandert. aber so weit ich weiß, muss ich sie jetzt aufrufen und dann meine IF anweisung durchführen oder?
PHP-Code:<?php
$selectedTeam = 'Borussia Dortmund';
$pos = getPosition($selectedTeam);
function getPosition($team){
$sql = "
SELECT
yz.*
FROM
(SELECT * FROM xy) AS yz;
SELECT
pos
FROM
(
SELECT
@pos:=@pos+1 AS pos,
fifa_m.mannschaft
FROM
(SELECT @pos:=0) AS vars,
fifa_mannschaften AS fifa_m
ORDER BY
fifa_m.punkte DESC
) AS rangliste
WHERE
rangliste.mannschaft = '{$team}'";
$result = mysql_query($sql);
return mysql_result($result, 0);
}
getPosition();
if($pos=="13") {
echo 'Du hast deinen erhofften Platz ('.$pos.') erreicht'; } else {
echo 'Du hast dein ziel nicht erreicht.';
}
?>
edit: obwohl, sie wird ja eigentlich hier schon aufgerufen oder?
PHP-Code:$pos = getPosition($selectedTeam);
-
Jepp, ganau dort. Nachher hast du $pos und du kannst es so verwenden wie von dir vorgschlagen.
Ich empfehle dir, PHP-Befehle und konstrukte die du nicht kennst nachzulesen was sie machen. Mit reinem C&P gibts immer Probleme. So ist in meinem SQL bereits die Annahme drin, dass die Felder die wir brauchen bei dir punkte und mannschaft heissen. Kann ja aber auch anderst sein. Dann musst du wissen wo du das anpassen musst.---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
ja,
ich habe mir das konstrukt von dir natürlich durchgelesen und auch versucht nachzuvollziehen. mannschaft müsste man glaube ich zu name ändern, weil die Spalte "name" heißt, in der Borussia Dortmund steht. Punkte ist richtig.
habe jetzt folgendes gemacht:
ausgabe ist jedoch immer der Else - Teil..PHP-Code:<?php
function getPosition($team){
$sql = "
SELECT
yz.*
FROM
(SELECT * FROM xy) AS yz;
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.';
}
?>
-
Ups, mein C&P-Fehler Sorry. Im SQL stecken 2 SQLs drin. Asche über mein Haubt.
So müsste natürlich das SQL sein.
PHP-Code:$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}'";
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Stimmt, das xy und yz war ja nur ein allgemeiner SQL Befehl als Beispiel

aber es erscheint dennoch nur der Else teil:
PHP-Code:<?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.---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Also der Tabellenplatz ist definitiv 13.
habe nun alle mir bekannten debug methoden eingesetzt:
Ausgabe ist folgende:PHP-Code:<?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.';
}
?>
Code :1
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-Code:<?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 '
Code sql:1
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.---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
Ähnliche Themen
-
Position eines Wortes in einem String ermitteln
Von spex im Forum Visual Basic 6.0Antworten: 1Letzter Beitrag: 28.12.07, 10:44 -
Position von CEdit ermitteln und neue Position setzen
Von olliss im Forum VisualStudio & MFCAntworten: 1Letzter Beitrag: 15.09.05, 19:30 -
Position eines Browserfensters ermitteln
Von zeppo im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 07.03.05, 07:51 -
Position inherhalb eines Array ermitteln
Von Funky_MF im Forum PHPAntworten: 1Letzter Beitrag: 18.02.05, 18:24 -
Position eines Bildes ermitteln
Von barbapapa im Forum Javascript & AjaxAntworten: 5Letzter Beitrag: 18.11.04, 14:42





Zitieren

Login






[PHP][Snippet] Array zu XML konvertieren