2 abfragen aus tabelle

sipoh

Erfahrenes Mitglied
Guten Tag,

folgendes habe ich stümperhaft gebastelt:

Code:
$result = $db->query("select username from user where userid='$profile_userid'");
$db->fetch_row($row,$result);
 
$result2 = $db->query("select username from user where userid='$userid'");
$db->fetch_row($row2,$result2);

 if(isset($_GET['userid'])) $profile_userid = $_GET['userid'];

 if($profile_userid == $userid) {

    } else {
    echo $row['username']."<br />";
    echo $row2['username'];
    }

Sinn soll es sein, Besucher eines Profils irgendwann zu speichern / auszugeben. Vorab muss natürlich geklärt werden, wer was ist. Ich als Besucher habe die feste userid (gehört zu meinem Profil). Der User der besuchten Seite hat die profile_userid. Nun möchte ich beide Usernamen (Besitzer und Besucher) und ihre Daten aus der DB auslesen. Frage: wie kann ich die 2 o. g. Abfragen zusammenfassen? Kann ich in der IF-Anweisung sagen: Wenn userid nicht! profile_userid dann speichere userid?
 
Mal noch ne andere Frage:

zu jedem User gibts eine Spalte "visitor" (oben erw.)

Gibt es ein workaround zu Folgendem:

- Es sollen in dieser Spalte max. 10 Einträge geschrieben werden
- der 11. ersetzt automatisch den 1. (ältesten)
- Die Einträge sind durch Kommas getrennt. Also user1,user2,user3 ..
- Wie kann ich das in Arrays speichern und in einem Loop untereinander ausgeben?

Dumme Fragen, finde dazu nix.
 
Wenn Du ein "Last Visitors" eines Profils machen willst würde ich persönliche eine extra Tabelle dafür machen die auf die User ID Deiner bestehenden Tabelle der User deutet. Sprihc jeder Visit eines Profils schreibt einen neuen Datensatz in die Tabelle "hits". Dann einfach die Abfrage limitieren....also die letzten 10 Visitors anzeigen. z.B
PHP:
"SELECT * FROM hits WHERE iduser=$userid LIMIT 10";
 
Also etwa so?

#####################
hits
#####################
ID___visitid___visitor
1____101____user243
1____102____user33
..
1____110____user3
2____201
.

1. Wobei id analog userid ist;
2. Hab ich Denkfehler. 110 wäre der neueste User. Wenn x11, müssten alle bisherigen user um 1 nach unten fallen. Wäre also visitid 110 dann 109 und 101 würde gelöscht werden. Nur so würde die Reihenfolge "stabil" und authentisch bleiben. Oh man.
 
Anynomen Besuchern brauchst Du keine ID zuweisen. Wenn es registrierte waren dann diese ID noch speichern. Ich würde bei jedem Satz das Datum reinschreiben und dann die letzten 10 des betroffenen Users nach Datum sortiert ausgeben.

Also als Felder der Tabelle
id -> autoincrement
iduser -> id vom Users dessen Profil besucht wurde
idvisitor -> id eines registrierten Users (bleibt leer wenn anyonymer Visitor)
timestamp -> für spätere Sortierung

Anhand der Visitorid kannst Du dann auch auf den Nicknamen bzw. Namen in der Tabelle der registrierten User zugreifen und somit auch in der Ausgabe direkte Links zu deren Profilen erzeugen.

Sorry...10 mal editiert... ;)
 
Zuletzt bearbeitet:
Gäste gelangen nie zu dieser Seite, in der diese Abfrage läuft. Jeder hat/braucht seine ID (die erfolgreiches Login voraussetzt).

Ich hab das jetzt mal so gemacht:

Code:
// Wenn Profil nicht meins, insert
if($visitor==$besuchter) {
  echo 'Meine eigene Seite';
  } else {
   $result = $db->query("insert into visitor (id, user, visitid) values ('$profile_userid', '$visitor', '')");
  }

Die Ausgabe in Schleife:

Code:
// Ausgabe der Besucher in Schleife
$insben = $db->query("select * from visitor where id='$profile_userid' limit 10");
while($db->fetch_row($row,$insben)){
echo $row['user']."<br />";
}

Passt ja, soweit. Nun sitze ich an folgender Sache:

"id" und "visitid" werden nicht automatisch gesetzt, sondern kriegen einen definierten Wert. Eben "id" die "id" des besuchten Profils und "visitid" eine 3- oder 4-stellige Zahl, die sich aus "id" und einer Zahl zwischen 1-10 zusammen setzt.

zu vistid:
Schauen, welche visitid´s existieren bsp. 301,302,303 sind da. wobei 303 der letzte Besucher ist. Dann soll überprüft werden, ob der Besucher schon in Tabelle gelistet ist. Wenn ja, passiert lediglich ein Update, sodass seine visitid an 1. Stelle rückt. Ist er nicht drin, geschieht das dann mit insert. Ist er drin oder nicht, aber an 11. Stelle .. fällt der älteste von den 10 gelisteten Besuchern weg. Wobei ich diese Update-Geschichte weglassen möchte. Hat keine Notwendigkeit.

Hm..
 
Warum so umständlich mit IDs hantieren. Wenn eh nur reg User da hinkommen kannst Du ja auch immer deren eindeutige Userid in die Tabelle Visits schreiben. Zusammen mit einem Timestamp lässt sich das super sortieren.


Also wenn ein User das Profile besucht
PHP:
$query = "INSERT INTO visits (iduser, idvisitor, timestamp) VALUES ($IDvomUserDesProfils, $IDvomBesucher, NOW();"
Dann in der Profilansicht
PHP:
$query = "SELECT * FROM visits WHERE iduser=$IDvomUserDesProfils ORDER BY timestamp LIMIT 10;"
Das gibt Dir dann die letzten 10 Besucher anhand Ihrer IDs zurück woraus man dann wieder Links zu deren Profilen machen kann.
PHP:
$result = mysql_query($query);
while($besucher = mysql_fetch_array($result))
{
     print '<a href="linkzuUserprofil.php?userid='$visitor["idvisitor"]..'>Direkt zum Profil</a>';
}
 
Ich denke wirklich etwas wirr. Du hast recht. Mein Problem ist eigentlich nur das "limit 10". Das sagt ja nur, dass die letzten 10 ausgegeben werden sollen. Die Datenbank füllt sich aber weiterhin bis ins Unendliche im Hintergrund mit "visits"..
 
Um ältere zu bereinigen müsste halt nochmal ne Funktion irgendwo aufgerufen werden die ältere löscht. Würde ich aber gar nicht unbedingt machen (Bei kleinen Projekten). Viel Speicherplatz nimmt das nicht weg. Ansonsten vielleicht via Cronjob 1 mal im Monat oder so bereinigen lassen.
 
Zurück