DB abfrage über mehrere Tabellen

Godstyle

Erfahrenes Mitglied
Moin,

ich versuche eine DB abfrage über mehrere Tabellen durchzuführen, zunächst mal der aufbau der tabellen:

Tab1 (ow_login):

id | user

Tab2 (f_changes):

f_changes_id | f_ch_userid | changed |wann

Tab3 (ow_user_data):

userid | userimg

Tab4 (ow_user_img):

new_userimg_pfad | img_user_id

Nun einmal Das Script was die abfrage starten soll:

PHP:
$f_all = array_merge((array)$f_chk_user1, (array)$f_chk_user2);		

	
for($i=0; $i<=count($f_all)-1; $i++)
{
		$query = mysql_query("SELECT
`id`, `user`, `changed`, `userid`, `confirmcode`, `userimg`, `wann`, `new_userimg_pfad` 

FROM `ow_login`, `f_changes`, `ow_user_data`, `ow_user_img` 
WHERE `img_user_id` = `id` 
     AND `f_ch_userid` = `id`
    AND `userid` = `id` 
    AND `f_ch_userid` = '$f_all[$i]' 
    ORDER BY `wann` DESC");
		 if (!$query) {
  		  echo "Anfrage ($query) konnte nicht ausgeführt werden : " . mysql_error();
		  exit;	
		 }

Das Problem ist nun, das er mir jeden eintrag 3 mal anzeigt, wenn auch mit den Richtigen Informationen, woran könnte das liegen?

Als ANmerkung, ich habe nicht direkt versucht alle 4 Tabellen zu verbinden, erst als ich auf `ow_user_img` zugegriffen habe trat dieser fehler auf, vorher war die anzahl der Ausgabe korrekt.

lg

Ok, ich bin wirklich übermüdet, habe den Grund für den Fehler gefunden, er liefert nun 18 ergebnisse und es sollten 6 sein.
Das Array hat 3 einträge, also 3 * 6 sind die 18.

Damit ist das Problem ein anderes, ich Möchte eigentlich, das das Script für jeden eintrag im array einmal alles ausgibt. Ich hoffe ihr könnt mich verstehen.
 
•A warum setzt Du für Deine Variable einfache Anführungszeichen ' und nicht schräge ` wie sonst auch?
•B warum lässt Du nicht id mit der Variable $f_all[$i] vergleichen?
•C warum gibst Du id nicht überall den gleichen Namen?

Ich denke auf Anhieb aber, dass in •B das Problem steckt. Diese ist in jener Tabelle ow_login unique (hoffentlich) und f_ch_userid in f_changes wird es wohl mehrmals geben, dort ist nämlich f_changes_id unique.

mfg chmee
 
Hi chmee,

zu A, wenn ich die variable in ` setze gibt er mir eine fehlermeldung unknown coloume '(der array wert)' in Where clausel

zu B stimmt eigentlich habe ich gemacht und nun bekomme ich die 4 fache ausgabe also jede zeile 12 mal

zu C Ja, id ist unique

edit C: Dann bekam ich die fehlermeldung das keine eindeutige zuweisung erfolgen konnte, daher hab ich es eben geändert

ich sehe grade, das du davon ausgehst, das f_changes_id unique ist, das ist nicht der fall und ich kann dies auch nicht auf UNIQUE setzen da es die userid beinhaltet und ein User mehrere änderungen machen kann.

So Ich hab es gelöst, du hast mich darauf gebracht da du davon ausgingst das es sich bei f_changes_id um einen UNIQUE handeln müsse.

Nun habe ich es geändert und die abfrage ist nun wie folgt:

PHP:
		$query = mysql_query("SELECT `id`, `user`, `changed`, `userid`, `userimg`, `wann`, `new_userimg_pfad` 
					FROM `ow_login`, `f_changes`, `ow_user_data`, `ow_user_img` 
					WHERE 
						(`erstellt` = `wann` AND `img_user_id` ='$f_all[$i]' )
					AND `f_ch_userid` = `id` 
					AND `userid` = `id` 
					
					ORDER BY `wann` DESC");

Ich denke mal wenn ich auf beide zeiten teste und gleichzeit auf die user id sollte es doch richtig sein.

Ich setze es mal auf erledigt, sollte ich mich irren, so sagt es mir bitte.

lg
 
Wenn es funktioniert, ist es erstmal gut. Da ich den Dateninhalt und die Abhängigkeiten nicht kenne, wäre ich simpel davon ausgegangen, dass id = '$f_all[$i]' zum Ziel geführt hätte. Alternativ wäre LEFT JOIN ein Mittel.

und zu •A - my fault, es ist ja eine Variable und keine Tabellenspalte..

mfg chmee
 

Neue Beiträge

Zurück