Archiv verlassen und diese Seite im Standarddesign anzeigen : Select-Ausgabe aus einer Referrals-Tabelle
Hallo und guten Abend,
ich hänge schon seit Tagen an einer Select-Ausgabe und bekomme es einfach nicht hin. Habe auch schon einige Foren durchstöbert, bin aber nicht fündig geworden.
Nun hoffe ich hier eine Antwort zu finden.
Habe eine Tabelle: 'referrals' mit :
-----------------------
username | referrals |
-----------------------
gamas | delta
gere | beta
admin | gamas
admin1 | gere
admin2 | gere
------------------------
Was ich versuche ist eine Statistik hinzubekommen:
Der User "beta" ist gerade eingeloggt und hat folgende referrals:
----------------------------------------------------
1.referrals 2.referrals 3.referrals usw.
----------------------------------------------------
1(gere) 2(admin1+admin2) 0
====================================================
Das mit dem 1.referrals das bekomme ich hin mit:
$query="select count(username) from referrals where referrals='$PHP_AUTH_USER'";
$PHP_AUTH_USER ist der User wer eingeloggt ist, bei uns hier der User: beta.
Was ich nicht hinbekomme ist, daß es mir die 2 beim 2.referrals anzeigt. D.h. der User beta hat zwei referrals.
Wie kann ich in einer Select-ausgabe sagen, daß in der Zeile vom referral "beta" den username: "gere" gibt und der referral:gere hat 2 usern (admin1 + admin2).
Es müßte so aussehen:
$query="select count(username) from referrals where referrals='gere'";
Aber "gere" kann ich ja nicht eingeben, daß es ja bei jedem User unterschiedliche Namen sind.
Ich hoffe Ihr versteht was ich damit meine und habt eine Lösung für mich.
Danke
BrainBug 04-04-2001, 08:42 warum liest du nicht den Usernamen "gere" aus und machst dann einen neuen select?
$query="select count(username),username from referrals where referrals='$PHP_AUTH_USER'";
und dann ne Schleife über die Anzahl von Treffern -> und da kannst du dann jedesmal den "Unter-Query" ausführen. Deine Gesamtanzahl hast du trotzdem.
Vielen Dank für Deine Antwort,
heute Nacht um ca 24:00 ist mir die Lösung eingefallen, wie aus dem Nichts.
Ich habe auch zuerst den 1.referrals selectiert, und dann nochmals ein Select mit dem Resultat von dem 1. select und es funktioniert. Ich hätte Sprünge machen können.
Aber trotzdem für Deine Hilfe.
Bis dann
Original geschrieben von BrainBug
warum liest du nicht den Usernamen "gere" aus und machst dann einen neuen select?
$query="select count(username),username from referrals where referrals='$PHP_AUTH_USER'";
und dann ne Schleife über die Anzahl von Treffern -> und da kannst du dann jedesmal den "Unter-Query" ausführen. Deine Gesamtanzahl hast du trotzdem.
Ich muß nochmals um Deine Hilfe bitten.
Ich habe mich zu früh gefreut.
Es funktioniert leider nur soweit, daß wenn das Resultat 3 User sind, und ich nochmals ein select mit dem Resultat mache bringt er mir nur das Resultat von dem 1.User und nicht von alle 3 User. Kannst Du mal ein Blick auf das Script werfen ??:
$query="select username from referrals where referrals='$PHP_AUTH_USER'";
$result=@mysql_db_query("$db",$query,$link);
$dir1=@mysql_result($result,"dir1");
$query="select count(username) from referrals where referrals='$dir1'";
$result=@mysql_db_query("$db",$query,$link);
$indirekt2 =@mysql_result($result,"indirekt2");
Das Resultat von $dir1 sind 3 User.(soweit OK) Aber dann das Resultat von $indirekt2 kann er leider nur das Resultat von dem 1.User anzeigen.
Kannst Du mir einen Tipp geben ?
Danke
BrainBug 09-04-2001, 08:45 für Oracle würde es eine feine Lösung geben. Aber du mußt sowieso nur eine kleine Schleife um deine zweite Abfrage bauen.
$query="select username from referrals where referrals='$PHP_AUTH_USER'";
$result=@mysql_db_query("$db",$query,$link);
$dir1=@mysql_result($result,"dir1");
$query="select count(username) as anzahl,* from referrals where referrals='$dir1'";
$result=@mysql_db_query("$db",$query,$link);
$anzahl_der_jetzigen_user=mysql_result($result,0,"anzahl");
for ($i=0;$i<$anzahl_der_jetzigen_user;$i++) {
$indirekt2 =@mysql_result($result,$i,"indirekt2");
}
müßte schon reichen. Du mußt aber auch in deinem zweiten Select nicht nur die Anzahl counten, sondern auch den eigentlichen Inhalt selektieren -> mit *
Hallo,
vielen Dank für Deine schnelle Hilfe, aber leider funktioniert irgendetwas nicht, denn ich erhalte kein Resultat.(er bringt aber auch kein Fehler)
Bei Deiner Schleife habe ich alles nochmals überpüft und kann kein Fehler finden. Aber etwas passt nocht nicht ganz.
Wäre Dir sehr dankbar wenn Du mir nochmals helfen würdest.
Die Ausgabe als echo ist doch $indirekt2, ODER?
Danke
XAROC
BrainBug 09-04-2001, 17:08 ja mei:
$query="select username from referrals where referrals='$PHP_AUTH_USER'";
$result= mysql_db_query($db,$query,$link);
$dir1= mysql_result($result,"dir1");
$query="select count(username) as anzahl,* from referrals where referrals='$dir1'";
$result= mysql_db_query($db,$query,$link);
$anzahl_der_jetzigen_user= mysql_result($result,0,"anzahl");
echo "Anzahl Datensätze: ".$anzahl_der_jetzigen_user;
for ($i=0;$i<$anzahl_der_jetzigen_user;$i++) {
$indirekt2 = mysql_result($result,$i,"indirekt2");
echo $indirekt2;
}
gibt es auch das Feld "indirekt2" ??
SORRY, SORRY,
es funktioniert leider immer noch nicht. Hier mein Script:
$query="select count(username) from referrals where referrals='$PHP_AUTH_USER'";
$result=@mysql_db_query("$db",$query,$link);
$direkt1 =@mysql_result($result,"direkt1");
$query="select username from referrals where referrals='$PHP_AUTH_USER'";
$result=@mysql_db_query("$db",$query,$link);
$dir1=@mysql_result($result,"dir1");
$query="select count(username) as anzahl,* from referrals where referrals='$dir1'";
$result=@mysql_db_query("$db",$query,$link);
$anzahl_der_jetzigen_user=mysql_result($result,0,"anzahl");
for ($i=0;$i<$anzahl_der_jetzigen_user;$i++) {
$indirekt2 =@mysql_result($result,$i,"indirekt2");
}
Und dann habe ich eine Tabelle mit den Ausgaben:
<td width="100"><font face="Arial"><center><? echo ($direkt1) ?></font></td>
<td width="100"><font face="Arial"><center><? echo ($indirekt2) ?></font></td>
<td width="100"><font face="Arial"><center><? echo ($indirekt3) ?></font></td>
<td width="100"><font face="Arial"><center><? echo ($indirekt4) ?></font></td>
<td width="100"><font face="Arial"><center><? echo ($direkt1+$indirekt2+$indirekt3+$indirekt4) ?></font></td>
Siehts Du irgendetwas?
DANK
BrainBug 09-04-2001, 17:30 Ja!
BrainBug 09-04-2001, 17:35 Okay, okay, ich sag dir auch was:
du gibst irgendwelche Variablen aus, die du nie ausgelesen hast.
Lösung:
$query="select count(username) from referrals where referrals='$PHP_AUTH_USER'";
$result=mysql_db_query("$db",$query,$link);
$direkt1 =mysql_result($result,"direkt1");
$query="select username from referrals where referrals='$PHP_AUTH_USER'";
$result=mysql_db_query("$db",$query,$link);
$dir1=mysql_result($result,"dir1");
$query="select count(username) as anzahl,* from referrals where referrals='$dir1'";
$result=mysql_db_query("$db",$query,$link);
$anzahl_der_jetzigen_user=mysql_result($result,0,"anzahl");
for ($i=0;$i<$anzahl_der_jetzigen_user;$i++) {
$indirekt2[$i] =mysql_result($result,$i,"indirekt2");
}
Und dann habe ich eine Tabelle mit den Ausgaben:
<td width="100"><font face="Arial"><center><? echo ($direkt1) ?></font></td>
<td width="100"><font face="Arial"><center><? echo ($indirekt2[0]) ?></font></td>
<td width="100"><font face="Arial"><center><? echo ($indirekt2[1]) ?></font></td>
<td width="100"><font face="Arial"><center><? echo ($indirekt2[2]) ?></font></td>
<td width="100"><font face="Arial"><center><? echo ($direkt1+$indirekt2[0]+$indirekt2[1]+$indirekt[2]) ?></font></td>
so kannst du auch die Ausgabe über eine Schleife machen und immer fein das Array rausechoen.
for ($i=0;$i<$anzahl_der_jetzigen_user;$i++) {
echo "<td width=\"100\"><font face=\"Arial\"><center>".$direkt2[$i]."</font></td>";
}
du kannst auch ruhigen Gewissens die Variable $anzahl_der_jetzigen_user bißchen kürzer benennen :D
SUPER,
Wäre es auch möglich mir zu sagen was ????
BITTE, BITTE
BrainBug 09-04-2001, 17:43 hast wohl meine Antwort verpaßt...
Du machst mich wahnsinnig ...
Welche Antwort meinst Du denn ??
BrainBug 09-04-2001, 17:57 he, kannst du meine Antwort nicht lesen? Vielleicht mal aktualisieren -> steht als nächster Eintrag hinter meinem "Ja"-Eintrag. Kannst DU denn SEHEN? :D
Die Änderungen sind nicht wahnsinnig aufällig, sind aber da...
OK, habe die Antwort gefunden,
habe alles genauso wie Du geschrieben hast geändert, funzt aber immer noch nicht.
Entweder bin ich blöd, oder ich bin blöd.
Welche Variante gefällt Dir??
Ich weiß nicht was ich noch tun soll. Könntest Du mir vielleicht dein Kopf kurz per Post herschicken?
Die "direkt1" Zahl bringt er ja, nur die indirekt2 nicht.
Hast Du mir noch einen Tipp.
DANKE
BrainBug 09-04-2001, 18:27 Sorry, muß weg. Melde mich morgen früh wieder... halte durch...
OK,
aber bin leider bei der Arbeit, komme um ca. 15:00 dann.
DANK
BrainBug 10-04-2001, 08:25 Moin erstmal,
also, hier nochmals der Code, wieder bißchen verändert:
// hier der Query für User direkt für Anzahl und Name
$query= "select * from referrals where referrals='$PHP_AUTH_USER'";
$result= mysql_db_query($db,$query,$link);
// hier die Anzahl holen
$direkt1= mysql_numrows($result);
// hier den Namen holen (davon ausgehend, daß nur ein Treffer!!)
$dir1= mysql_result($result,0,"dir1");
// jetzt schauen, was als User indirekt
$query="select * from referrals where referrals='$dir1'";
$result2= mysql_db_query($db,$query,$link);
// Anzahl der Treffer für indirekt
$anz= mysql_numrows($result2);
// hier alle Treffer Usernamen in Array ablegen
for ($i=0;$i<$anz;$i++) {
$indirekt2[$i] = mysql_result($result2,$i,"indirekt2");
}
// Ausgabe als HTML
<td width="100"><font face="Arial"><center><? echo ($direkt1) ?></font></td>
// Schleife über Array
<? for ($i=0;$i<count($indirekt2);$i++) { ?>
<td width="100"><font face="Arial"><center><? echo $indirekt2[$i];?></font></td>
<? } ?>
// keine Ahnung, was du hier ausgibts, aber okay...
<td width="100"><font face="Arial"><center><? echo ($direkt1+$indirekt2[0]+$indirekt2[1]+$indirekt[2]) ?></font></td>
So, jetzt müßte es wirklich funktionieren. Hatte noch einen Schreibfehler bei der Ausgabe des Arrays im alten Code und die DB-Abfrage sind jetzt richtig. Und auch kürzer. Jetzt bin ich gespannt, muß ja bis heute abend warten :(
naja, schreib mal gleich, was geht...
P.S.: Mein Gott, was arbeitest du denn, daß du schon um 15h fertig bist????
[Editiert von BrainBug am 10-04-2001 um 08:30]
Hallo,
als erstes Danke, daß DU mich nicht vergessen hast.
Ich arbeite 35h die Woche, 7h am Tag, deshalb um ca. 15:00 schon Feierabend (wenn ich es schaffe um 7:00 anzufangen). Wir haben auch Gleitzeit, deshalb verleitet es mich immmer Morgens erst um ca. 7:30 oder sogar 8:00 anzufangen.
Leider funktioniert das immer noch nicht. Wenn ich ganz genau so mache wie Du sagst bekomme ich folgende Fehler:
dir1 not found in MySQL result index 3 in ..... on line 57
indirekt2 not found in MySQL result index 4 in .... on line 65
Dir1 und indirekt2 gibt es nicht in meiner MYSQL-Tabelle, daß waren ja nur Namen von mir damit ich ein Zwischenresultat bekomme. (?!?)
Wenn ich ändere von
$dir1=mysql_result($result,0,"dir1");
in
$dir1=@mysql_result($result,0,"dir1");
Dann bringt er kein Fehler mehr, aber er bringt auch keine Zahl.
Wenn ich noch ändere von:
$query="select * from referrals where referrals='$dir1'";
in
$query="select count(username) from referrals AS anz,* where referrals='$dir1'"; (wie Du mich ja gestern gelehrt hast)
Dann bringt er die Zahl 0. (immerhin ein Anfang). Er sollte aber die Zahl 7 bringen, dann wäre ich HAPPY.
Kannst Du verstehen, was ich meine?
BrainBug 10-04-2001, 16:42 STOP!
Das andere war genau richtig. Eben das mit den Fehlermeldungen (mit einem @ vor einem Funktionsaufruf unterdrückst du die Fehlermeldung).
Also wieder zurück zu Variante von heute morgen.
Und du mußt natürlich ( hab ich auch schon mehrmals nachgefragt :mad: ) die richtigen Feldnamen bei den mysql_result-Aufrufen einsetzen -> wenn dein Feld in der DB z.B. "username" heisst, dann mußt du auch mysql_result($result,0,"username") einlesen. Wenn es "dir1" oder "indirekt2" als Felder nicht gibt, dann mußt du die durch die richtigen Feldname ersetzen.
Also, nochmal meine vermutete Variante, davon ausgehend, daß die Felder "username" und "referrals" heissen:
// hier der Query für User direkt für Anzahl und Name
$query= "select * from referrals where referrals='$PHP_AUTH_USER'";
$result= mysql_db_query($db,$query,$link);
// hier die Anzahl holen
$direkt1= mysql_numrows($result);
// hier den Namen holen (davon ausgehend, daß nur ein Treffer!!)
$dir1= mysql_result($result,0,"username");
// jetzt schauen, was als User indirekt
$query="select * from referrals where referrals='$dir1'";
$result2= mysql_db_query($db,$query,$link);
// Anzahl der Treffer für indirekt
$anz= mysql_numrows($result2);
// hier alle Treffer Usernamen in Array ablegen
for ($i=0;$i<$anz;$i++) {
$indirekt2[$i] = mysql_result($result2,$i,"username");
}
so, jetzt klappt's. Wehe, wenn nicht ;)
Darf ich mich eigentlich noch an Dich wenden ?????
Hast Du noch Geduld mit mir??
Es funktioniert immer noch nicht.
Ich glaube wir sollten nochmals von vorne anfangen.
Wahrscheinlich hast Du schon bemerkt was ich mit der Referrals-Tabelle machen will.
Der User logt sich ein und kann seine Statistik abfragen in einer Tabelle:
Statistik |Sie selbst | Direkt 1.| Indirekt 2.| Indirekt 3. Indirekt 4.| Gesamt |
Referrals | . | 3 | 4 | 0 | 0 | 7 |
Paid-Start |50 | 0 | 0 | 0 | 0 |50 |
PaidE-Mail |20 | 0 | 0 | 0 | 0 |20 |
PaidKlick |20 | 0 | 0 | 0 | 0 |20 |
Gesamt 04/2001| 90| 0| 0 |0 |0 |90 |
Meine Tabelle in MYQSL heißt referrals, da gibt es eine Spalte mit Username und eine mit Referrals.
Jetzt möchte ich, daß wenn der User X eingeloggt ist, sieht er in seiner Tabelle, 3 Direkt1, 4 Indirekt2, 0 Indirekt3, 0 Indirekt4, Gesamt 7 Referalls.
Das heißt, es gibt ein X-User der sich als Referrals bei über den Y-User anmeldet. Der Z-User meldet sich über den X-User an. => Y-User hat 1.Direkt (X) und 1.Indirekt (Z).
Du verstehen?
Danke für den Tipp mit @ (Unterdrückung der Fehlermeldung).
Hast Du einen RAT für mich BLÖDIAN ?
BrainBug 10-04-2001, 17:25 $result1=mysql_query("select * from tabelle where referrals='$PHP_AUTH_USER'");
$anz1=mysql_numrows($result1);
$anz_redir2=0;
$anz_redir3=0;
for ($i1=0;$i1<$anz1;$i1++) {
$user=mysql_result($result1,$i1,"username");
$result2=mysql_query("select * from tabelle where refarrals='$user'");
$anz2=mysql_numrows($result2);
$anz_redir2=$anz_redir2+$anz2;
for ($i2=0;$i2<$anz2;$i2++) {
$user2=mysql_result($result2,$i2,"username");
$result3=mysql_query("select * from tabelle where refarrals='$user2'");
$anz3=mysql_numrows($result3);
$anz_redir3=$anz_redir3+$anz3;
}
}
$gesamt=$anz1+$anz_redir2+$anz_redir3;
echo "Direkt: ".$anz1." indirekt1: ".$anz_redir2." indirekt2: ".$anz_redir3." Gesamt: ".$gesamt;
falls du es merkst -> hier handelt es sich um eine rekursive Variante der Abfrage -> wenn du x-fach das runterbrechen willst, mußt du das als Funktion machen, die dann rekursiv aufgerufen wird. Falls nötig, kann ich dir das zeigen, aber erstmal schauen, ob das überhaupt funktioniert. Es werden nur die Anzahlen rausgezogen, nicht die usernamen!
Den Select von letztens mit "count(username),*" kannst du vergessen. Der geht gar nicht, da das ein Mix ist.
was willst Du jetz von mir hören ?????
BrainBug 10-04-2001, 18:07 Hä? Was heißt hier HalloHallo? und was bedeutet "was willst du von mir hören?"
Hast du meinen Vorschlag ausprobiert? Geht's? Oder nicht?
Ich dachte schon Du bist sauer auf mich.
Mit was willst Du von mir hören, meinte ich ein "es geht" oder "es geht nicht".
Ich glaube ein "geht nicht" könntest Du nicht mehr verkraften.
ES GEHT, ES GEHT, ES GEHT, ES GEHT.
Ich mußte nur noch an deinem Code was ändern:
Anstatt tabelle habe ich referrels (so heißt auch meine Tabelle), eingetragen und Dein "refarrals" habe ich in "referrals" geändert. Und schwupdiwup läufts.
Habe auch noch den 4.Indirekt hinzugefügt, den $anz_redir4.
Wie kann ich Dir nur danken ? Du hast mir sehr geholfen, hätte es alleine nie geschafft.
Woher kennst Du so gut Mysql ?? Würde gerne noch vieles von Dir lernen.
Ich hätte auch schon eigentlich das nächste Problem. Aber nein, ich kann nicht mehr von Dir verlangen.
Nochmals DANKE
Würde mich auf ein baldiges Treffen freuen.
Bis bald
XAROC
BrainBug 10-04-2001, 18:25 :D:D:D:D:D
freut mich auch riesig, daß es klappt.
Und immer her mit den Problemen und Fragen. Beantworte ich gerne, zumindest wenn ich dazu was weiß ;)
außerdem mache ich das hier auch nicht zum reinen Zeitvertreib. Ich schau mir an, was die anderen so denken und sagen. Und außerdem bringt es mich weiter, wenn ich mir über solche Probleme Gedanken mache. Mal was nachschlagen oder im Netz schauen.
Okay, bis zum nächsten mal
Hallo BrainBug, Guten Morgen
da Du Dich schon so gut mit meinen Daten auskennst, würde ich mich freuen, wenn Du mir bei meinem nächsten Schritt weiterhilfts. Wenn Du keine Lust mehr hast, bitte einfach nur sagen.
Ich habe doch jetzt die Referrals ermittelt: Direkt1, Indirekt2, Indirekt3 und Indirekt4.
Jeder der User hat in meiner "logfiles" Tabelle Punkte angesammelt, die in der Statistik-Tabelle auch ausgegeben werden sollen.
Der User X hat 50 Punkte, der User Y hat 40 Punkte, der User Z hat 80 Punkte. Das gleiche Beispiel von heute Mittag: X ist Referrals von Y, und Z von X. Das heißt, daß in Direkt1 steht die Summe der Punkte von seinen Direkt1 Usern in dem Feld von Indirekt2 steht die Summe der Punkte von seinen Indirekt2 Usern usw.
Ich will aber noch tiefer gehen, und zwar die Direkt1, Indirekt2 usw. erhalten nur einen Teil der Punkte, die die User ja tatsächlichen an Punkte haben.
Ich hoffe Du verstehts mich, und ich hoffe auch ich verlange nicht zuviel.
Kann ich IRGENDWIE die Resultate von Deinem SUPER-CODE von heute Mittag verwenden?
Aber ich bin mir ganz sicher, daß Du mir da eine Lösung hast. Ich würde mich auf eine Antwort Morgen Mittag freuen.
Bis dann
BrainBug 11-04-2001, 07:52 Leider kann ich dir heute morgen noch keine Antwort geben, da ich dein Ansinnen nicht ganz verstehe :confused:
Hab eigentlich alles verstanden... bis auf den großen Absatz.
Wieso in die Tiefe? WAS bedeutet denn das? WIESO enthält Direkt1 usw. nur einen Teil der Punkte?
Wenn du jetzt User X hast und schaust, wer X als sein Direkteintrag hat und da dann wiederum alle User (Y,Z etc.) rausholst und da wiederum schaust, wer diese als Direkteintrag hat, dann hast du doch, wenn du alles zusammenzählst, alle die mit X zu tun haben- direkt und indirekt.
Ist ja im Prinzip nix anderes als eine Baumstruktur (z.B. bei Navigation oft benutzt) mit Vaterknoten und Kindern.
Naja, egal, verklicker mir doch nochmal (auch an einem durchgängigen Zahlenbeispiel), was du machen willst...
P.S.: Willst du vielleicht nicht nur bis Indirekt4, sondern so tief, wie es eben in die Tiefe geht? Wenn ja, dann ja, d.h. das ist machbar. Müssen wir über eine rekursive Funktion lösen. Kein Problem, aber sag Bescheid, ob es das ist, was du willst...
Erstmal Hallo,
was wir gestern gemacht haben, war ja von User X die User (Direkt und Indirekt zu selectieren).
Das gleiche will ich jetzt mit den Paidstart-Punkten machen. Das heißt jeder User hat in meiner Tabelle: logfiles eine Anzahl von Punkten. Genauso wie wir gestern die (Direkt + Indirekt) Usern von X ausselectiert haben, selctieren wir jetzt die Punkten dieser (Direkt+Indirekt) Usern aus.
Der User X bekommt bei seinem Startaufruf 5 Punkte in der Tabelle: logfiles gutgeschrieben. Der User Y (Direkt1 von X) bekommt bei seinem Startaufruf auch 5 Punkte gutgeschrieben. Gleichzeitig bekommt der User X - 2 Punkte (da er ja Direkt1 von X ist) gutgeschrieben.
Da dachte ich an so etwas z.B.
//Das sind die Paidstart_Punkte des User X (der eingeloggt ist
$query="select * from logfiles where username='$PHP_AUTH_USER'";
$result=mysql_db_query("db",$query,$link);
$paidstart =mysql_result($result,0,"paidstart");
//Das sind die Paidstart_Punkte des User Y (Direkt1 von X)
$result1=mysql_query("select SUM(paidstart/2,50) from logfiles where username='$dir1'");
//$dir1 sind dann die User die wir ja gestern selectiert haben
$dir1=mysql_numrows($result1);
usw. bis zu Indirekt1.
Verstehts DU ????
Ist schwierig zu erklären. :-)
Hi,
ich glaube meine Erklärung von heute Nachmittag war nicht so verständlich.
Antwort auf Deine Frage: ich gehe nur bis in 4 Ebenen tief. Bei mir gibt es nur Direkt1, Indirekt2, Indirekt3, Indirekt4.
Ich versuche es nochmal,
User X ist eingeloggt, er hat 500 Punkte auf seinem Konto
Er hat 2x Direkt1 (Y,Z), 2x Indirekt2 (A,B), 1x Indirekt3 (C), 2x Indirekt4 (D,E)
Y hat 50 Punkte, Z hat 35 Punkte - Direkt1
A hat 30 Punkte, B hat 25 Punkte - Indirekt2
C hat 10 Punkte - Indirekt3
D hat 55 Punkte, E hat 95 Punkte - Indirekt4
So, der X sieht nun in seiner Statistik
500 Punkte //Seine eigene
34 Punkte // von Direkt1 (gerechnet: (50+35):2,5 = 34)
11 Punkte // von Indirekt2 (gerechnet: (30+25):5 = 11)
2 Punkte // von Indirekt4 (gerechnet: (10):5 = 2)
30 Punkte // von Indirekt2 (gerechnet: (55+95):5 = 30)
Und dann ist schluß, es geht nur bis Indirekt4.
Was noch möglich wäre, daß wenn der Direkt1 seine Startseite aufruft, daß sofort bei X die Punkte in der Tabelle gutgeschrieben werden. Aber ich glaube das ist komplizierter.
Ich hoffe, daß es jetzt ein bißchen deutlicher wurde. :-)
BrainBug 11-04-2001, 18:51 Hi,
ja, jetzt ist schon klar, was du willst.
Kann mich leider erst morgen früh drum kümmern. War heute im Streß und mach jetzt die Fliege.
Okay, schönen Abend und bis morgen
Danke
also dann bis Morgen
BrainBug 12-04-2001, 08:03 Moin,
also, du speicherst irgendwelche Startpunkt in einer extra-Tabelle weg. Welche sind das? Nur die (steht glaube ich in einem anderen Beitrag,oder?), die er durch einen Start der Seite erhält?
Falls ja, dann willst du dazu noch diese direkt, indirekt1-indirekt4-Punkte dazuhaben.
Das geht eigentlich auf dem Weg, wie wir es schon angefangen haben.
Falls du aber immer die aktuelle Gesamtzahl in dieser Starttabelle speichern willst, geht das so nicht mehr. Da weiß du ja nicht mehr, welche Punkte schon mal gezählt wurden. Da müßtest du dann anders vorgehen -> beim Anmelden oder Starten von ihm oder direkt/indirekts von ihm müssen die Punkte direkt in die Tabelle geschrieben werden.
Zweite Variante aufwendiger. Erste haben wir schon fast.
Was brauchst du davon? Oder habe ich dich total mißverstanden?
Hi
Wie gehts Dir??
Das mit der ersten Variante trifft zu. Und zwar mit der Startseite (werde ich auch noch klein wenig Deine Hilfe brauchen) wird automatisch sein Konto in der Tabelle um 5 Punkte erhöht. Genauso wie bei allen anderen Usern auch, wenn diese Ihre Startseiten aufrufen.
Was ich in meiner Statistik-Tabelle wiedergeben möchte ist, daß der User der eingeloggt ist, seine Punkte sowie die Punkte seiner Direkt1 - Indirekt4 sehen kann.
OK??
BrainBug 12-04-2001, 16:24 Hi,
bin nach wie vor noch im Streß, anscheinend wollen alle noch kurz vor Ostern alles möglich durchbringen.
Okay, Variante 1 ist gut. Hast also eine Tabelle, wo du die summierte Startpunkt hast, auf die dann noch die Punkte draufaddiert werden, die wir ja schon über das Skript von vorne rauskriegen.
Sollte machbar sein, allerdings nicht jetzt, sorry. Habe noch zu tun und dann ist ja Ostern angesagt, d.h. ich werde erst am Dienstag wieder hier unterwegs sein... muß dich leider vertrösten.
Bis dann und schöne Ostern.
OK,
ich habe in den nächsten Tagen auch Einiges vor. Also kein Problem, bis Dienstag dann.
Schöne Ostertage,
XAROC
BrainBug 20-04-2001, 11:55 Hallihallo,
hat sich dein Problem mittlerweile gelöst oder ist es immer noch akut. Wenn ja, dann gib Bescheid, dann machen wir uns dran, dem Problem ein für alle mal den Gar auszumachen.
Bis dann
Hallo,
schön mal wieder von Dir zu hören.
Das Problem besteht leider immer noch. Würde mich freuen wenn wir es lösen könnten.
Bis bald dann
Xaorc
Hallo und guten Morgen,
bin heute zu Hause. Würde mich freuen wenn wir das Problem lösen könnten.
Hoffe und warte auf Deine Antwort,
Bis bald
BrainBug 24-04-2001, 09:10 Moin,
sorry, bin irgendwie bißchen raus. Muß mir erst noch mal in ruhe alles anschauen, was wir da so hin und her geschrieben haben. Melde mich gegen abend dann....
Morgen,
OK.
Bin heute auch noch zu Hause. Könnte sein, daß ich nur heute Abend kurz nicht zu Hause bin. Werde mich aber dann melden wenn ich kurz nicht da bin.
Bis dann
Hallo,
so wie es aussieht hattest Du keine Zeit. Vielleicht klappst ja Morgen früh! Hätte da auch nocht ein paar Stunden Zeit.
Also bis dann
BrainBug 25-04-2001, 09:31 Hi xaroc,
sorry, daß es ein bißchen gedauert hat. Aber heute morgen hatte ich mal kurz Zeit, mir in Ruhe das Problem nochmals anzuschauen und ich hoffe mit dem folgenden Code klappt es und es ist hoffentlich das, was du erreichen willst:
// ------- wer gehört direkt zum User -------
$result1=mysql_query("select * from referrels where referrals='$PHP_AUTH_USER'");
$anz1=mysql_numrows($result1);
// ------- Paidstart-Punkte des Users direkt holen -------
$paidresult=mysql_query("select * from logfiles where username='$PHP_AUTH_USER'");
$paidstart=mysql_result($paidresult,0,"paidstart");
// ------- Zähler auf Null setzen -------
$anz_redir2=0;
$anz_redir3=0;
$anz_redir4=0;
$anz_redir5=0;
// ------- Schleife über die selektierten User 1.Ordnung (direkt) --------
for ($i1=0;$i1<$anz1;$i1++) {
$user=mysql_result($result1,$i1,"username");
$result2=mysql_query("select * from referrels where referrals='$user'");
$anz2=mysql_numrows($result2);
$anz_redir2=$anz_redir2+$anz2;
// ------- Paidstart-Punkte des Users holen und durch 2.5 teilen, dann dazuaddieren -------
$paidresult2=mysql_query("select * from logfiles where username='$user");
$paidstart=$paidstart+(mysql_result($paidresult2,0,"paidstart")/2.5);
// ------- Schleife über die selektierten User 2.Ordnung (indirekt1) --------
for ($i2=0;$i2<$anz2;$i2++) {
$user2=mysql_result($result2,$i2,"username");
$result3=mysql_query("select * from referrels where referrals='$user2'");
$anz3=mysql_numrows($result3);
$anz_redir3=$anz_redir3+$anz3;
// ------- Paidstart-Punkte des Users holen und durch 5 teilen, dann dazuaddieren -------
$paidresult3=mysql_query("select * from logfiles where username='$user2");
$paidstart=$paidstart+(mysql_result($paidresult3,0,"paidstart")/5);
// ------- Schleife über die selektierten User 3.Ordnung (indirekt2) --------
for ($i3=0;$i3<$anz3;$i3++) {
$user3=mysql_result($result3,$i3,"username");
$result4=mysql_query("select * from referrels where referrals='$user3'");
$anz4=mysql_numrows($result4);
$anz_redir4=$anz_redir4+$anz4;
// ------- Paidstart-Punkte des Users holen und durch 5 teilen, dann dazuaddieren -------
$paidresult4=mysql_query("select * from logfiles where username='$user3");
$paidstart=$paidstart+(mysql_result($paidresult4,0,"paidstart")/5);
// ------- Schleife über die selektierten User 4.Ordnung (indirekt3) --------
for ($i4=0;$i4<$anz4;$i4++) {
$user4=mysql_result($result4,$i4,"username");
$result5=mysql_query("select * from referrels where referrals='$user4'");
$anz5=mysql_numrows($result4);
$anz_redir5=$anz_redir5+$anz5;
// ------- Paidstart-Punkte des Users holen und durch 5 teilen, dann dazuaddieren -------
$paidresult5=mysql_query("select * from logfiles where username='$user4");
$paidstart=$paidstart+(mysql_result($paidresult5,0,"paidstart")/5);
}
}
}
}
// ------- Anzahl der gefundenen Referrals summieren -------
$gesamt=$anz1+$anz_redir2+$anz_redir3+$anz_redir4+$anz_redir5;
// ------- Anzahl der aufsummierten Paidstart-Punkte ausgeben -------
echo "Paidstart-Punkte: ".$paidstart."<br><br>";
// ------- Einzelwerte der Referrals ausgeben -------
echo "Direkt: ".$anz1."<br>Indirekt1: ".$anz_redir2."<br>Indirekt2: ".$anz_redir3."<br>Indirekt3: ".$anz_redir4."<br>Indirekt4: ".$anz_redir5."<br><br>Gesamt: ".$gesamt;
Habe den Code mal bis auf den indirekt4, also bis in die 5.Ordnung runter, ausgeweitet. Falls zuviel kannst du ja ne Schleife rausnehmen, oder erweitern. Wäre natürlich mit einer rekursiven Funktion wesentlich eleganter zu lösen gewesen, aber da das meiste vom Code schon stand, habe ich es so belassen.
Laß hören, ob alles okay ist oder was noch nicht stimmt.
Bis dann :cool:
Hallo und vielen vielen Dank,
so weit alles OK, habe vieles ändern müssen und anpassen, aber kein Thema.
Es gibt aber noch ein Fehler:
zu Deiner Info, er soll die Paidstart der User nur durch die Summen teilen und nicht auch noch die $paidstart dazuaddieren. Habe also das $paidstart + ..... herausgemacht. Was er aber macht ist er zeigt nur die Zahl der Paidstart des letzten Users an.
z.B.
x=150 Punkte
y=200 Punkte
z=20 Punkte.
Das Resultat soll sein (150+200+20)/2.5. Was er im Moment macht ist die letzte Zahl 20/2.5.
Das bedeutet man muß zuerst die Summe der Paidpunkte der Direkt1 oder Indirekt2... ermitteln und dann die Summe teilen.
Glaubt Du, Du kannst das realisieren??
DANK, DANK, DANK
BrainBug 25-04-2001, 12:19 so, damit du zufrieden bist....
// ------- wer gehört direkt zum User -------
$result1=mysql_query("select * from referrels where referrals='$PHP_AUTH_USER'");
$anz1=mysql_numrows($result1);
// ------- Paidstart-Punkte des Users direkt holen -------
$paidresult=mysql_query("select * from logfiles where username='$PHP_AUTH_USER'");
$paidstart=mysql_result($paidresult,0,"paidstart");
// ------- Zähler auf Null setzen -------
$anz_redir2=0;
$anz_redir3=0;
$anz_redir4=0;
$anz_redir5=0;
$paidstart2=0;
$paidstart3=0;
$paidstart4=0;
$paidstart5=0;
// ------- Schleife über die selektierten User 1.Ordnung (direkt) --------
for ($i1=0;$i1<$anz1;$i1++) {
$user=mysql_result($result1,$i1,"username");
$result2=mysql_query("select * from referrels where referrals='$user'");
$anz2=mysql_numrows($result2);
$anz_redir2=$anz_redir2+$anz2;
// ------- Paidstart-Punkte des Users holen und durch 2.5 teilen, dann dazuaddieren -------
$paidresult2=mysql_query("select * from logfiles where username='$user");
$paidstart2=$paidstart2+mysql_result($paidresult2,0,"paidstart");
// ------- Schleife über die selektierten User 2.Ordnung (indirekt1) --------
for ($i2=0;$i2<$anz2;$i2++) {
$user2=mysql_result($result2,$i2,"username");
$result3=mysql_query("select * from referrels where referrals='$user2'");
$anz3=mysql_numrows($result3);
$anz_redir3=$anz_redir3+$anz3;
// ------- Paidstart-Punkte des Users holen und durch 5 teilen, dann dazuaddieren -------
$paidresult3=mysql_query("select * from logfiles where username='$user2");
$paidstart3=$paidstart3+mysql_result($paidresult3,0,"paidstart");
// ------- Schleife über die selektierten User 3.Ordnung (indirekt2) --------
for ($i3=0;$i3<$anz3;$i3++) {
$user3=mysql_result($result3,$i3,"username");
$result4=mysql_query("select * from referrels where referrals='$user3'");
$anz4=mysql_numrows($result4);
$anz_redir4=$anz_redir4+$anz4;
// ------- Paidstart-Punkte des Users holen und durch 5 teilen, dann dazuaddieren -------
$paidresult4=mysql_query("select * from logfiles where username='$user3");
$paidstart4=$paidstart4+mysql_result($paidresult4,0,"paidstart");
// ------- Schleife über die selektierten User 4.Ordnung (indirekt3) --------
for ($i4=0;$i4<$anz4;$i4++) {
$user4=mysql_result($result4,$i4,"username");
$result5=mysql_query("select * from referrels where referrals='$user4'");
$anz5=mysql_numrows($result4);
$anz_redir5=$anz_redir5+$anz5;
// ------- Paidstart-Punkte des Users holen und durch 5 teilen, dann dazuaddieren -------
$paidresult5=mysql_query("select * from logfiles where username='$user4");
$paidstart5=$paidstart5+mysql_result($paidresult5,0,"paidstart");
}
}
}
}
// ------- Anzahl der gefundenen Referrals summieren -------
$gesamt=$anz1+$anz_redir2+$anz_redir3+$anz_redir4+$anz_redir5;
// ------- Anzahl der aufsummierten Paidstart-Punkte berechnen und ausgeben -------
$paidgesamt=$paidstart+($paidstart2/2.5)+($paidstart3/5)+($paidstart4/5)+($paidstart5/5);
echo "Paidstart-Punkte: ".$paidgesamt."<br><br>";
// ------- Einzelwerte der Referrals ausgeben -------
echo "Direkt: ".$anz1."<br>Indirekt1: ".$anz_redir2."<br>Indirekt2: ".$anz_redir3."<br>Indirekt3: ".$anz_redir4."<br>Indirekt4: ".$anz_redir5."<br><br>Gesamt: ".$gesamt;
aber das andere war mindestens genauso richtig, da:
(150+200+20)/2.5 = 148
und
(150/2.5)+(200/2.5)+(20/2.5) = 148
also gehupst wie gesprungen.
Hallo,
tja irgendwie sind mir die Worte wie weggeflogen. Ich weiß gar nicht was ich schreiben soll.
Ehrlich gesagt, ich weiß auch gar nicht wie ich Dir jemals danken soll. Du hast mir sehr geholfen, als erstes damit ich mein Ziel erreichen kann und als zweitens habe ich dabei sehr viel gelernt.
Es gibt noch ein paar Codes in meiner Statistik einzufügen, aber das bekomme ich hin denn da muß man nur kurz die wörter ändern und der Rest ist ja gleich oder ähnlich.
Jetzt mal zu DIR, kannst Du mir mal Dein Preis nennen, was schulde ich Dir? Vielleicht kann ich Dir bei irgendetwas helfen. Bitte lass mich es wissen !!!
Ich hoffe wir sprechen uns öfters mal.
Bis dann
XAROC
P.S.
Jetzt noch zwei kurze Fragen: weißt Du wie man eine Reloadsperre einfügt?
Oder wie man mit Checkboxen umgeht? Habe auch schon diese zwei Themen gepostet aber keine Antwort.
BrainBug 25-04-2001, 12:57 Du schuldest mir doch nix, so'n Quatsch. Wenn ich dir nicht hätte helfen wollen, hätte ich doch bloß nicht antworten brauchen.
Außerdem mache ich das hier eigentlich nur, um selber mal neue Strukturen kennenzulernen, andere Probleme mitzukriegen und andere Antworten/Lösungsansätze zu erfahren.
also, immer locker bleiben. :cool:
zu deiner Reloadsperre:
ich würde entweder ein Cookie setzen und wenn Cookie schon da, dann keinen neuen Eintrag in DB (darum geht's doch oder?). Gefahr allerdings ist die Manipulation von Cookie oder die Ablehnung/Abschaltung von Cookie.
Als Alternative könntest du für den User in einer Tabelle die letzte "Log"-Zeit wegschreiben und wenn die nur z.B. 300 (=5Min) kleiner ist als aktuelle, dann kein Eintrag.
zu Checkboxen: ?? Das Thema kenn ich nicht, um was geht es da? Klar kenn ich mich mit checkboxen aus, was willst du denn machen?
Das finde ich echt toll, Du hast Dir fast den Arsch aufgerissen um mir zu helfen, und dann auch noch so bescheiden.
Ich finde es auch toll, daß Du anderen Menschen gern hilfst bei deren Problemen. Möchte mich nochmals bedanken, und sag mir falls Du mal in irgendeiner Weise Hilfe brauchts, nicht zögern, einfach ansprechen.
Das mit den anderen zwei Problemen, habe hier in diesem Forum gepostet und alles schon beschrieben was ich gern machen möchte.
Falls Du noch mehr Informationen brauchts einfach sagen.
Das mit den Cookies setzen, ist leichter gesagt als getan. Blicke ich noch nicht so richtig durch.
Muß jetzt mal kurz außer Haus. Falls Du noch Zeit hast kannst Dir ja die zwei Themen mal ansehen.
Also bis dann
|
-
- |