PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bestimmten Wert einer Zeile in MySQL herauslesen ?



Stormsam
08-10-2003, 16:49
Hi @all,

Ich hab eine kleinen Login (von hier (http://www.php-resource.de/tutorials/read/33/1/) )

Habe da jetzt eine neue Zeile "Punkte" reingemacht.

Ich würd jetzt gerne ein paar rechnung mit den Punkten machen, doch weiß ich nicht wie ich jetzt z.B. die Punkte von user1 und die Punkte von user2 einzelnd (mit unterschiedlichen variablen!) herausbekomme und gleich alle Punkte von allen Usern zu bekommen !

im Moment sieht das bei mir so aus:



$querystr =

"select
Platz,
Name,
Punkte
from users

order by Platz
";



$result = mysql_query ($querystr)
or die ("cannot execute query");


while($daten = mysql_fetch_array($result))


echo $daten["Punkte"];

So zeigt er mir aber alle Punkte nacheinander !
Ich will nur die Punkte von z.b. user1 und user2.

!Gaert! hatte mir den Tipp mit dem Befehl WHERE gegeben ... ich habe mich ein bisschen darüber informiert allerdings verstehe ich das nicht so ganz !

In meinem PHP-Buch steht zum Beispiel so eine Zeile:

$querystr = "SELECT * FROUM users
WHERE Name = '{$name}'
AND Punkte = '{$punkte}'

funktioniert bei mir nicht auch ohne {} nicht !
Außerdem versteh ich nicht was das bringt ... heißt das nicht das jetzt die Zeile "Name" die Variable $name hat?
Weil dann würde er ja wieder alle namen zeigen ... ich möchte aber nur 2 bestimmte herauspicken =) .
Er soll z.b. die Punkte von user1 + die Punkte von user2 rechnen !
Und dafür muss ich ja irgendwie die Punkte von user1 und user2 herausnehmen und unterschiedliche Variablen geben!

Weiß jemand wie ich soetwas machen kann ?!?

MfG
Stormsam

Jana
08-10-2003, 18:30
Gaert hat schon Recht.
Du willst den User1 mit dem Namen Mair und den User2 mit dem Namen Huber.

Also mußt du zuerst nach User1:Mair fragen.


"select Platz,
Name,
Punkte
from users
where Name='Mair'
order by Platz ";


Anschließend mußt du nach Huber fragen.
***********************************

Bei
"
select Platz,
Name,
Punkte
from users
where Name='Mair' or Name='Huber'
order by Platz ";

kannst du nicht mehr unterscheiden wem die Punkte zuzuordnen sind.

************************************

Andererseits kannst du auch ganz leicht dem user1,user2,user3 die Punkte zuordnen ohne, daß du sie einzeln abfragst.


Bei "$query=select Platz,
Name,
Punkte
from users
order by Platz ";

$result= mysql_query($query);

while (list ($Platz,$Name,$Punkte) = mysql_fetch_array($result)):
print "$Name $Punkte $Platz";
endwhile;

mehlvogel
08-10-2003, 22:09
Erstens: Der gute Mensch heißt Gaert ;)
Zweitens: Um auf deine andere Frage einzugehen und zwar alle auf einmal abzufragen



$query = "SELECT sum(Punkte) AS gesamt FROM users";
$result = mysql_query($query);


Verarbeiten musst du das result dann alleine.

@Jana, ist net böse gemeint, aber ich finde dein Posting ein wenig verwirrend - also Stormsam.

Wenn du nur das Ergebniss von User1 und User2 haben willst, musst du die Abfrage natürlich begrenzen (ansonsten gibt er dir alle ergebnisse nacheinander aus). An dieser Stelle gibt es zwei Möglichkeiten, einmal: Du machst für jeden User eine gesonderte Abfrage, das ist aber relativ unperformant. Besser ist, du machst eine Abfrage in der du beides abfragst:



SELECT Name, Punkte
FROM users
WHERE
Name='User1' OR
Name='User2'


Versuche SQL als richtige Sprache zu verstehen, dein Querie wäre wörldich in etwa so:

"Suche Name und Punkte aus der Tabelle users wobei der Name Entweder User1 oder User2 ist"

Das ganze kannst du dann in einer while Schleife verarbeiten:



while ($daten = nysql_fetch_array($result)) {
echo $daten["Name"]." hat ".$daten["Punkte"]." Punkte";
}


Hoffe das war ein wenig verständlich.

Nochmal an Jana: Wo kriegt man diese komische while Syntax her?

Stormsam
08-10-2003, 22:21
HI !

Danke für deine ausführliche Antwort ! ;)


"
select Platz,
Name,
Punkte
from users
where Name='Mair' or Name='Huber'
order by Platz ";

Das hier sieht schon mal ganz gut aus! So zeigt er die Punkte von Mair und Huber an =)

Das Problem ist jetzt ... wie kann ich damit jetzt rechnen ?
Also z.B. die Punkte von Mair minus die Punkte von Huber ?
Den Beide Punkte haben die selbe Variable (Bei mir zumindest).
echo $daten["Punkte"];
Kann man das noch irgendwie trennen ?!?

Mfg
Stormsam

Stormsam
08-10-2003, 22:26
oh ... da hat mehlvogel auch noch gepostet =) Danke auch an dich !


$query = "SELECT sum(Punkte) AS gesamt FROM users";
$result = mysql_query($query);

Hey das sieht schon nach einer Rechnung aus ;)
Aber ich wollt nicht die Gesamte Punktzahl (im Moment noch nicht ... find aber das könnt ich noch gebrauchen =) )
Sondern ich will nur mit den Punkten von user1 und user2 rechnen.
Punktzahl von user1 minus der punktzahl von user2 zum beispiel !

Kann man das irgendwie trennen ? (-> siehe meinen Beitrag vorher!)

mfG
Stormsam

Gaert
08-10-2003, 22:59
Original geschrieben von mehlvogel
Erstens: Der gute Mensch heißt Gaert ;)

Jop... so isses! :D

Ich lass euch hier mal weiterwerkeln!

@Stormsam: Falls du das noch nicht kennst schau es dir mal an: http://dblabor.f4.fhtw-berlin.de/morcinek/sqltutor/ - Beachte aber bitte, dass MySQL nicht alles beherrscht, was dort beschrieben wird.

Jana
09-10-2003, 08:15
Sorry Gaert. Da hat sich wohl ein Tippfehler eingeschlichen !! :(

Ich weiß ja nicht, ob wirklich nur mit den Punkten von Mair und Huber gerechnen werden soll.
Innerhalb der while-Schleife könntest du natürlich folgendes prüfen:

if ($daten["Name"] == Mair) {$Punkte_Mair=$daten["Punkte"] ;}
if ($daten["Name"] == Huber){$Punkte_Huber=$daten["Punkte"] ;}

$Punkte=$Punkte_Mair - $Punkte_Huber;

Diese Vorgehensweise erscheint mir allerdings seltsam.

Stormsam
09-10-2003, 14:46
@Gaert soooooooooooooory :(


@Jana
Das sieht doch ganz gut aus! Danke dir ;)
Doch wieso scheint dir das seltsam zu sein ?
Ich wollt das so machen das wenn user1 gegen user2 gewinnt user1 ein paar Punkte von user2 bekommt und user2 ein paar verliehrt.
Damit er nicht gleich alle Punkte verliehrt habe ich mir eben dieses geniale System ausgedacht :D
Er soll das so rechnen:
Sagen wir user1 hat 100 Punkte und user2 hat 90 Punkte dann sieht das so aus und user1 kriegt jetzt die punkte:

Neue_PunkteZahl_User2: (90 x 1,9) - 100 = 71
Zwischenrechnung: 100 - 71 = 29
Neue_PunkteZahl_User1: 100 + 29 = 129

Erklärung: Die 90 ist die Punktzahl von user2, alle 71 sind die neue Punktzahl von user2. Alle 100 sind die Punktzahl von user1. Alle 29 sind die Punkte die User1 dazu kriegt (muss irgendwie mit der punktzahl von user1 und den neuen punkten von user2 errechnet werden (zwischenrechnung). Der Rest muss dann mit der alten Punktzahl von user1 addiert werden und die Summe ist dann die neue Punktzahl von User1.

hmm... ist ein bisschen umständlich, aber es sollte möglich sein.
Und um das zu machen muss ich ja irgendwie die Punktzahl von user1 und user2 herausnehmen und in einzelne Variablen packen.

-> und das ist da doch genau das richtige oder?


if ($daten["Name"] == Mair) {$Punkte_Mair=$daten["Punkte"] ;}
if ($daten["Name"] == Huber){$Punkte_Huber=$daten["Punkte"] ;}

$Punkte=$Punkte_Mair - $Punkte_Huber;

Ich habe das mal ausprobiert. Zum Test habe ich user1(Mair) 70 Punkte gegeben und user2(Huber) 50 Punkte.
Dann habe ich in 70 - 50 rechnen lassen.
Und er bekommt immer 70 raus ?!? Wie kann das angehen ;)
Er rechnet das irgendwie nicht richtig aus, bei mir sieht das jetzt so aus:



$querystr =

"select
Platz,
Name,
Punkte
from users
where Name='test' or Name='test2'

order by Platz
";



$result = mysql_query ($querystr)
or die ("cannot execute query");


while($daten = mysql_fetch_array($result))

if ($daten["Name"] == test2) {$Punkte_test2=$daten["Punkte"] ;}
if ($daten["Name"] == test3){$Punkte_test3=$daten["Punkte"] ;}

$Punkte=$Punkte_test2 - $Punkte_test3;

echo $Punkte;

Hab ich da was falsch ?

MfG
Stormsam

mehlvogel
09-10-2003, 18:03
if ($daten["Name"] == test3){$Punkte_test3=$daten["Punkte"] ;}


Wenn deine User test und test2 heißen gibt es test3 net ;)
Ansosnte würde ich den namen mit " einschließen, also so:



if ($daten["Name"] == "test"){$Punkte_test3=$daten["Punkte"] ;}


Das ist sauberer.

Stormsam
09-10-2003, 20:37
hmm... auch mit den " geht das irgendwie bei mir nicht.

Er zeigt bei mir immer nur die größte Zahl oder die erste Zahl an !

Hier einmal ohne Fehler:


$querystr =

"select
Platz,
Name,
Punkte
from users
where Name='test' or Name='test2'

order by Platz
";



$result = mysql_query ($querystr)
or die ("cannot execute query");


while($daten = mysql_fetch_array($result))

if ($daten["Name"] == "test") {$Punkte_test=$daten["Punkte"] ;}
if ($daten["Name"] == "test2"){$Punkte_test2=$daten["Punkte"] ;}

$Punkte=$Punkte_test - $Punkte_test2;


echo $Punkte;

test hat 100 Punkte test2 70 Punkte und er rechnet 100 aus ! ? !

MfG
Stormsam

sixfriends
09-10-2003, 20:43
Ehrlich gesagt bin ich ein wenig zu faul heute, um den ganzen Thread sorgfältig zu lesen, aber wie wäre es damit:


$query = "SELECT Name, Punkte FROM users WHERE Name='Mair' OR Name='Huber'";
$result = mysql_query($query);
while($daten = mysql_fetch_object($result)) {
$punkte[$daten->Name] = $daten->Punkte;
}


Dann sollten $punkte['Mair'] Die Punkte von Mair enthalten, $punkte['Huber'] die Punkte von Huber und wenn du alles ab und einschließlich dem WHERE weglässt, liegen auch alle anderen gelisteten Personen in diesem Format vor. Ist doch recht sinnvoll, dass PHP assoziative Arrays unterstützt.
;)

Sorry: fetch_object, nicht array :D