[MySQL(/PHP)] Weiterlaufende Abfrage

Hast du eventuell einen Link für sowas da?
Ich finde kein Tutorial oder ähnliches so für MySQLi. Und ich habe mit MySQLi noch nie gearbeitet ;)

Tutorial nein... aber die Hilfe von php.net ist gut und hat geüngend Beispiele. Und so schwer ist es auch nicht, du kannst es vom prinzip her soverwenden wie mysql* bis auf das die Verbindungskennung jetzt nicht mehr optional ist.


Also zurzeit gebe ich den Baum bei der Refübersicht mit Hilfe einer Funktion aus, welche sich immer wieder aufruft, bis die Refebenen durch sind.Nur würde ich das gleiche machen für die Upline (auch unvergütete) dann würde ich ja auf sehr viele Querys kommen. Deswegen suche ich ja "einfach" eine Query mit der man das auslesen kann.

Die Rekrusivefunktion ist Ok wenn du nur mal nen Baum anzeigen willst oder so. Ansonsten würde ich dir empfehlen dich an die Tabellen Struktur von theHacker zu halten. Ist zwar nicht das schönste, ist aber dadruch recht einfach und erweiterbar. Alternativ wenn der Payout nur über 3 Ebenen stattfinden soll wäre es auch möglich die Tabelle 3 mal mit sich selbst zu joinen. Ist aber nicht wirklich Flexibel.

Ich glaube ich habe es aber selber gut rausbekommen:

Ich habe gelesen, dass man mit MySQL Variablen verwalten kann, (@var:=`spalte`).
Man könnte doch dann die Query so gestalten:

Code:
SET @wid = 2;
SELECT @wid:=`uid` AS `uid` FROM `refs` WHERE `wid`=@wid AND `ebene`=1;

Nein das geht nicht. Du kannst nicht die Abhängigkeit von einen Wert abhängig machen der von der Abhängigkeit abhängig ist :ugly:
 
[..]Nein das geht nicht. Du kannst nicht die Abhängigkeit von einen Wert abhängig machen der von der Abhängigkeit abhängig ist :ugly:

Hmm... irgendwie klappt das schon, mein Tabelleninhalt:

Code:
+-------+----+----+
| ebene | uid | wid |
+-------+----+----+
| 1       | 1    | 2   |
| 1       | 6    | 1   |
| 2       | 6    | 2   |
| 2       | 1    | 8   |
| 1       | 10   | 6   |
| 2       | 10   | 1   |
| 3       | 10   | 2   |
+-------+----+----+

Meine Abfrage war:

Code:
SET @wid = 2;
SELECT `ebene`,@wid:=`uid` AS `uid`,`wid` FROM `refs` WHERE `wid`=@wid AND `ebene`=1;

Und mein Ergebnis ist:

Code:
+-------+----+----+
| ebene | uid | wid |
+-------+----+----+
| 1       | 1    | 2   |
| 1       | 6    | 1   |
| 1       | 10   | 6   |
+-------+----+----+

In mehreren Abfragen wäre das Ergebnis also:

Code:
SELECT `ebene`, `uid`, `wid` FROM `refs` WHERE `wid`=2 AND `ebene`=1;  // Gibt uid=1 zurueck
SELECT `ebene`, `uid`, `wid` FROM `refs` WHERE `wid`=1 AND `ebene`=1;  // Gibt uid=6 zurueck
SELECT `ebene`, `uid`, `wid` FROM `refs` WHERE `wid`=6 AND `ebene`=1;  // Gibt uid=10 zurueck
 
Hmm... irgendwie klappt das schon, mein Tabelleninhalt:
[...]

8O was es nicht so alles gibt. Hat aber zwei negative eigenschaften die es eigentlich unbrauchbar machen. Es muss immer alles in der richtigen reinfolge kommen (das wäre eventuell möglich), und ein Baum kannst du damit auch nicht abbilden... du erhälst immer nur den äussersten Zweig mit. Aber ist schon intressant das sowas überhaupt möglich ist.
 
8O was es nicht so alles gibt. Hat aber zwei negative eigenschaften die es eigentlich unbrauchbar machen. Es muss immer alles in der richtigen reinfolge kommen (das wäre eventuell möglich), und ein Baum kannst du damit auch nicht abbilden... du erhälst immer nur den äussersten Zweig mit. Aber ist schon intressant das sowas überhaupt möglich ist.

Wird die Variable für alle Connections genommen? Denn wenn ja ist es wirklich unbrauchbar. Sobald dann ja zwei das abrufen, geht das durcheinander. Würde das so sein, könnte man ja die Variable mit Hilfe von PHP bennen (also nen Namen anhand der Mikrozeit erstellen o.ä.).
Und ich möchte ja keinen Baum anzeigen, sondern gucken, ob der User X bereits in der (auch unvergüteten, nicht direkt in der DB gespeicherten) Downline von User Y ist.
Also immer gucken ob der Werber vom Werber der User Y ist, usw. .
 
Wird die Variable für alle Connections genommen? Denn wenn ja ist es wirklich unbrauchbar. Sobald dann ja zwei das abrufen, geht das durcheinander. Würde das so sein, könnte man ja die Variable mit Hilfe von PHP bennen (also nen Namen anhand der Mikrozeit erstellen o.ä.).
Und ich möchte ja keinen Baum anzeigen, sondern gucken, ob der User X bereits in der (auch unvergüteten, nicht direkt in der DB gespeicherten) Downline von User Y ist.
Also immer gucken ob der Werber vom Werber der User Y ist, usw. .

Nein die sind nur für die aktuelle Verbindung. Aber deine Idee geht drotzdem nicht auf. Mal nen Beispiel

https://upload.wikimedia.org/wikipedia/commons/2/22/Nestedsets.svg

wenn du jetzt von oben ausgehen würdest dann würde dir mysql nur Animal -> Mammel -> Carnivore -> Cat ausgeben und danach wäre ende. Also kannst du damit nicht wirklich sowas realisieren.
 
Nein die sind nur für die aktuelle Verbindung. Aber deine Idee geht drotzdem nicht auf. Mal nen Beispiel

https://upload.wikimedia.org/wikipedia/commons/2/22/Nestedsets.svg

wenn du jetzt von oben ausgehen würdest dann würde dir mysql nur Animal -> Mammel -> Carnivore -> Cat ausgeben und danach wäre ende. Also kannst du damit nicht wirklich sowas realisieren.

Uhh stimmt.. MySQL geht ja nur einen Weg lang.
Schaaade, und ich dachte schon ich habe es :(
 
Hat sonst noch wer eine andere Idee?

Nur was soll an MySQLi denn anders sein? Wie kann man damit nachgucken, ob der Werber den User bereits in der Downline hat?
Kann doch nicht so schwer sein... ^^
 
Hat sonst noch wer eine andere Idee?

Nur was soll an MySQLi denn anders sein? Wie kann man damit nachgucken, ob der Werber den User bereits in der Downline hat?
Kann doch nicht so schwer sein... ^^

in dem du den Baum durchgehst und das machst du am besten Rekrusiv. Das ganze geht auch mit den normalen MySQL Funktionen, aber mysqli bietet dir die möglichkeit von prepared Queries und die sind schneller als ein normaler Query.
 
in dem du den Baum durchgehst und das machst du am besten Rekrusiv. Das ganze geht auch mit den normalen MySQL Funktionen, aber mysqli bietet dir die möglichkeit von prepared Queries und die sind schneller als ein normaler Query.

Achso, also dann die Methode mit den vielen Querys ;) Nur ob ich dafür extra MySQLi verwende? Ist nen größeres Script und habe es dort noch kein einziges mal verwendet, sonder nur meine MySQL Klasse.
Und ob das nun einmal schneller ist oder nicht, wird wohl auch nicht so schlimm sein ;) Denn dieses Auslesen passiert ja nicht bei jedem Aufruf :)