mysql tabelle - 2 tabellen aber wie verknüpfen?

propoint

Grünschnabel
Ich hab hier einiges gelesen über join, bin mir aber nicht sicher OB mir das weiterhilft und wenn ja wie

ich habe eine tabelle friends (send_id fügt rcpt_id als freund hinzu status 0 = angenommen)
mit
friends.send_id | friends.rcpt_id | status
---------------------------------------------
1 | 2| 0
________________________________

und eine tabelle (pinboard) wo man nachrichten eintragen kann

pinboard.send_id | pinboard.message|
-------------------------------------------
1 | hallo |
-------------------------------------------
2 | hallo auch |
_______________________________

ich habe jetzt versucht die einträge aus pinboard mit

PHP:
$erg = mysql_query("

        SELECT pinboard.id, pinboard.send_id, pinboard.message, pinboard.time

        FROM pinboard, friends

       WHERE

       pinboard.send_id = '".$_SESSION["login"]."'

                    OR
                    
                    (pinboard.send_id = friends.send_id AND friends.rcpt_id = '".$_SESSION["login"]."' AND friends.status = '0')
                    
                    OR
                    
                    (pinboard.send_id = friends.rcpt_id AND friends.send_id = '".$_SESSION["login"]."' AND friends.status = '0')    

        ORDER BY pinboard.id DESC LIMIT 10

     ");

abzufragen. Das funktoniert auch wunderbar, bis ich die freundschaft lösche, dann zeigt der nichts mehr an
nichtmal meine eigenen einträge.
Kann mir JOIN helfen****
wenn mit JOIN wie bringe ich den dazu die send bzw. rcpt id des freundes herauszufinden.
(muss dazu sagen ich hab vorher noch nie mit JOINS gearbeitet)
 
Niemand eine idee?
Versteht man mich überhaupt?
kann sein - verstehe mich manchmal selbst nicht.
Vielleicht hilft ja erst ne freundes abfrage
und dann das ergebnis wenn größer "0"
Als while{}
einfügen?! Aber macht das pro user = 1 query?
würd solche geschichten die datenbank nicht quälen?
hülf --- büdde büdde
 
Operand should contain 1 column(s)
- was will man mir damit sagen ?! tabelle MUSS etwas enthalten? kann man das umgehen?
gruß
 
Du solltest deine Beiträge editieren können. Mach das bitte auch.

Ich kann nicht nachvollziehen woher diese Fehlermeldung jetzt kommt, da du keinen weiteren Code gepostet hast. Was sie bedeutet, kannst du mit einer Suchmaschine deiner Wahl herausfinden. Dann landest du zum Beispiel hier.
Wenn du allein nicht weiterkommst, dann poste bitte nochmal den Teil des Codes, bei dem es hakt, und erklär nochmal genau Schritt für Schritt was ist und was soll; ich habs im ersten Beitrag echt nicht verstanden.
Lies dir auch mal diesen Beitrag zum Debuggen durch, dadurch solltest du mehr Hinweise auf evtl. Probleme bekommen.
 
Hier mal dein SQL in Lesbarer Form mit entsprechender Syntax Highlighting
SQL:
SELECT 
	pinboard.id, 
	pinboard.send_id, 
	pinboard.message, 
	pinboard.time
FROM 
	pinboard, 
	friends
WHERE
	pinboard.send_id = '{$_SESSION["login"]}'
	OR (
		pinboard.send_id = friends.send_id 
		AND friends.rcpt_id = '{$_SESSION["login"]}' 
		AND friends.status = '0'
	)
	OR(
		pinboard.send_id = friends.rcpt_id 
		AND friends.send_id = '{$_SESSION["login"]}' 
		AND friends.status = '0'
	)    
ORDER BY 
	pinboard.id DESC 
LIMIT 10

Du hast da alles INNER JOIN. Das heisst, wenn keine Freunde mehr da sind, dann wird nix angezeigt. Du brauchst aber LEFT JOIN.

Das ganze ist eh ein wenig unübersichtlich. Ab besten ganz neu aufbauen.
Als erstes ermitteln wir alle Friende-Einträge wo wir vorkommen
SQL:
-- [my_freunde]
SELECT DISTINCT
	send_id AS user_id,
	'send'	AS type
FROM
	friends
WHERE
	status = 0
	AND rcpt_id = {$_SESSION['login']}
UNION ALL
SELECT DISTINCT
	rcpt_id AS user_id,
	'rcpt'	AS type
FROM
	friends
WHERE
	status = 0
	AND send_id = {$_SESSION['login']}
Dieses [my_freunde] können wir nun mit pinboard verbinden
SQL:
SELECT
	p.id, 
	p.send_id, 
	p.message, 
	p.time	
FROM
	pinboard				AS p
	LEFT JOIN [my_freunde]  AS f
		ON p.send_id = f.user_id
;
Das sieht dann ausgeschrieben etwa so aus
SQL:
SELECT
	p.id, 
	p.send_id, 
	p.message, 
	p.time	
FROM
	pinboard				AS p
	LEFT JOIN (
		SELECT DISTINCT
			send_id AS user_id,
			'send'	AS type
		FROM
			friends
		WHERE
			status = 0
			AND rcpt_id = {$_SESSION['login']}
		UNION ALL
		SELECT DISTINCT
			rcpt_id AS user_id,
			'rcpt'	AS type
		FROM
			friends
		WHERE
			status = 0
			AND send_id = {$_SESSION['login']}		
	)						AS f
		ON p.send_id = f.user_id
 
Zuletzt bearbeitet von einem Moderator:
Zurück