Bekomm den Query einfach nicht richtig hin

alex130

Erfahrenes Mitglied
Hi
Kann mir bitte wieder mal jemand helfen ^^
Und zwar bekomme ich meinen Query nicht richtig hin, ich hab immer einen Fehler...
Kurze erklärung zum Code:

Hier werden die 10 neusten User ausgelesen:
PHP:
	$sql6 = "SELECT * FROM `".$mysql_usertable_visits."` ORDER BY `time` DESC LIMIT 10";
	$res6 = mysql_query($sql6) OR die(mysql_error());
	$query6 = mysql_fetch_assoc($res6);

Dann kommt es in die While Schleife :
PHP:
	while ($row = mysql_fetch_assoc($sql6))
	{
			$id = $row["id"];
			$visitor_id = $row["visitor_id"];

			$sql3 = "SELECT * FROM `".$mysql_usertable."` WHERE id = '".$row["visitor_id"]."' DESC LIMIT 10";
			$res3 = mysql_query($sql3) OR die(mysql_error());
			$query3 = mysql_fetch_assoc($res3);
	
	 		echo '<a href=\"'.$_CONFIG['site_url'].'index.php?site=show_profile&id='.$row['visitor_id'].'">'.$query3['username'].'';
	 }
Und ich will einfach dass die 10 neusten User aus der Tabelle mysql_usertable ausgelsen werden. Es sollen aber nur User ausgelsen werden, deren ID auch in $sql6 vorhanden ist. Da in der mysql_usertable auch noch andere User sind.....
Ich weiß das war ziemlich ungenau^^ aber ich hoffe ihr könnt mir trotzdem helfen.
Achja der Feler den ich im moment bekomme ist folgender:
Code:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource
 
Du kannst hier mit einem Join arbeiten.
Code:
SELECT * FROM `".$mysql_usertable_visits."` as a, `".$mysql_usertable."` as u WHERE u.id = a.id ORDER BY `time` DESC LIMIT 10"

Den Feldnamen id musst du halt an deine DB-Struktur anpassen.
 
Hi
Nun hab ich es so:
PHP:
	$sql7 = mysql_query("SELECT * FROM `".$mysql_usertable_visits."` as a, `".$mysql_usertable."` as u WHERE u.id = a.id DESC LIMIT 10");

	while ($row = mysql_fetch_assoc($sql7))
	{	
	 	echo '<a href=\"'.$_CONFIG['site_url'].'index.php?site=show_profile&id='.$row['visitor_id'].'">'.$row['username'].'';
	}
Aber nun bekomme ich "Query was empty".
Da stimmt irgendwas mit den ID's nicht, oder? Denn die ID's die von $mysql_usertable ausgelesen werden sollen müssen doch erst von $mysql_usertable_visits ausgelesen werden, doch wie mach ich das mit dem Join?
Thx
 
Wie heissen denn deine beiden Felder in den einzelnen Tabellen, in denen die ID gespeichert wird?

Bei den visitors heisst sie doch visitor_id. Also solltest du das im Query anpassen.

JOIN
 
Dein Query ist auch ungültig:

Ein Select FROM geht nur in einer Table, nicht einem "virtuellem" Feld (a) - alsomuss die Synthax so sein:

Code:
$sql7 = mysql_query("SELECT feldname  AS a FROM `".$mysql_usertable_visits."`,u WHERE u.id = $mysql_usertable_visits.id DESC LIMIT 10");
 
Code:
SELECT t1.name, t2.salary FROM employee AS t1, info AS t2
  WHERE t1.name = t2.name;

SELECT t1.name, t2.salary FROM employee t1, info t2
  WHERE t1.name = t2.name;

Kannst du ja als Hilfe nehmen. Dann klappts auch mit dem Nachbarn ;)
 
Hi
Habs jetzt so:
PHP:
$sql7 = mysql_query("SELECT user_id  AS a FROM `".$mysql_usertable_visits."`,u WHERE u.id = $mysql_usertable_visits.user_id DESC LIMIT 10");
und jetzt bekomm ich folgenden Fehler:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource
lg
 
Oh man *gg*

Bis zum FROM passts.
Der Fehler liegt jetzt in der Tabellenname und im WHERE:

Wenn "u" keine Tabelle ist,hast Du natürlich einen Fehler - da muss der Tabellenname hin.
"user_id" ist ein Feld, wenn Du das also sonst nirgends verwendest ausser in der WHERE-Klausel, dann brauchst Du auch kein "AS a".

Also kannst Du das so schreiben, um zu Deinem ursprünglichen Problem mit den letzten 10 Usern zu kommen:
Code:
SELECT MAX(deine_tabellen_id) AS 'lastusers' FROM tablename LIMIT 10
 
Wenn Du mehrere Tabellen brauchst, muss die Synthax dann etwas anders sein:

Code:
SELECT tabelle1.feldname1,tabelle2.feldname2 FROM tabelle1, tabelle2 WHERE deine_bedingung ORDER BY feldname LIMIT 10

wichtig ist bei GLEICHEN feldnamen in mehreren Tabellen dass der feldname im SELECT-Teil mit seiner Tabelle durch einen Punkt "verknüpft" ist, um das Feld eindeutig zu bekommen. Wenn Du das Feld später im PHP brauchst, kannst Du dann auch folgendes schreiben:

Code:
SELECT tabelle1.feldname1 AS 'feld1', tabelle2.feldname2 AS 'feld2' FROM tabelle1, tabelle2 WHERE deine_bedingunen ORDER BY feldname LIMIT 10

Der Zugriff im PHP erfolgt dann über das "virtuelle" Feld:
Code:
while( $ret = mysql_fetch_array($result) ) {
  echo $ret['feld1'];
  echo $ret['feld2'];
}

LG
Andy
 
Zurück