Hallo iedereen
(sorry voor de mensen die een leeg topic zien op het begin. Nadeel van een touchpad)

Ik ben bezig met een forum. Daarvoor heb ik twee tabellen aan gemaakt. Een voor de reacties en een voor de Topics.

Voor de topics

CREATE TABLE `forum_topics` (
  `id` int(11) NOT NULL auto_increment,
  `schrijver` varchar(255) collate latin1_general_ci NOT NULL,
  `onderwerp` varchar(255) collate latin1_general_ci NOT NULL,
  `categorie` varchar(255) collate latin1_general_ci NOT NULL,
  `bericht` text collate latin1_general_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=200 ;


voor de reacties

CREATE TABLE `forum_reacties` (
  `id` int(11) NOT NULL auto_increment,
  `topic_key` int(11) NOT NULL default '0',
  `schrijver` varchar(255) collate latin1_general_ci NOT NULL,
  `onderwerp` varchar(255) collate latin1_general_ci NOT NULL,
  `categorie` varchar(255) collate latin1_general_ci NOT NULL,
  `bericht` text collate latin1_general_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=3 ;


Nou zie ik de reacties uit het tabel forum_reacties maar niet het start bericht uit de tabel forum_topics. Wel heb ik uit deze een onderwerp kunnen halen.

De query

$query3	 = mysql_query
	("
	SELECT forum_topics.id, forum_topics.schrijver, forum_topics.onderwerp, forum_topics.categorie, forum_topics.bericht, 
	forum_reacties.id, forum_reacties.topic_key, forum_reacties.schrijver, forum_reacties.categorie, forum_reacties.bericht
	FROM forum_topics
	LEFT JOIN forum_reacties
	ON forum_topics.id = forum_reacties.topic_key 
	WHERE forum_topics.id = '". $topicid ."' 
	AND forum_reacties.topic_key = '". $topicid ."' 
	") or die(mysql_error());


Ik hoop dat ik duidelijk genoeg ben.
Bij voorbaat dank,
vlerknozem
Op zich zit je query dus wel goed in elkaar. -> Geef alleen nog een alias aan de berichtkolom van beide tabellen:


SELECT 
   forum_reacties.bericht AS forumbericht,
   forum_topics.bericht AS topicbericht


Op zo'n manier. Dan kan je ze bijvoorbeeld weergeven door $row['forumbericht'] te doen.

Succes!
Kan je gewoon niet als je het topic weergeeft een select query maken met een where clause als deze?

WHERE topic_id = '".$GET['topic']."';

Sorry als ik er naast zit, ik ken niks van JOINS maar ik heb zelf nog nooit problemen gehad met reacties koppelen aan een topic oid.
@Cedric

Het ging niet om de koppeling, zoals de TS al aangaf krijgt hij wel alle reacties te zien, en haalt hij ook keurig het onderwerp op. De koppeling is dus wel goed. Zie ook mijn reactie.


Toelichting op mijn vorige reactie:
Als jij "SELECT tabel.pietje, tabel2.pietje" gebruikt in je query, geeft $row['pietje'] alleen de laatste keer weer. Dat wil zeggen de gegevens in de kolom "pietje" uit tabel2. Wil je dit voorkomen, dan zal je aliassen moeten gebruiken.
Het is hierbij verstandig om aan te geven wat het gegeven inhoud, en uit welke tabel die komt. Dat werkt voor jezelf wel net zo prettig.
Dus als ik het goed bergrijp met die aliassen:

Als ik deze neem:

SELECT 
   forum_reacties.bericht AS forumbericht,
   forum_topics.bericht AS topicbericht


Moet ik deze gebruiken

while($ikbenvariabel = mysql_fetch_array($ikbeneenquery)) 
{
$topic_bericht = $ikbenvariabel['topicbericht'];
$forum_bericht = $ikbenvariabel['forumbericht'];

// nu deze variabelen weergeven.
}


Dit is dan even heel zwart wit gezegd, maar klopt dit ongeveer?
Ja, want je geeft er een alias aan, alleen zou ik mysql_fetch_array vervangen door mysql_fetch_assoc. Dat is sneller en is bijna net hetzelfde. ( met array kan je fetchen als een associatieve array, numerieke array of beide, assoc fetcht enkel een associatieve array als ik het goed heb.)
Werkt perfect, en bedankt. Ik denk dat ik de JOINS nu wat beter onder de knie heb.

Echter zat ik nog met twee problemen hierdoor:
1) Topic bericht werdt heel vaak herhaalt, niet goed
2) Mijn kleuren, dus om en om krijgt het topic bericht de zelfde kleur als de eerste reactie.

Dus voor probleem 1 heb ik een $count aan gemaakt met het volgede

if($count < 1)
{
   // weergeef het onderwerp bericht
}


Voor probleem 2 heb ik de oplossing ook al...

Dus harstijke bedankt. Nu kan ik eindelijk weer verder :)
Echter is er nu nog een klein probleem.

Ik start nu een topic met een bericht. Het onderwerp en het bericht worden NIET weergeven. Zodra ik een reactie toevoeg, dan wordt wel alles weergeven. Een deel van mijn bron:


if ( ($categorie) AND ($topic_id) )
{
  $topicid = $_GET['topicid'];
  include("db_connect.php");
    $query3	 = mysql_query
	("
	SELECT forum_topics.id, forum_topics.schrijver, forum_topics.onderwerp, forum_topics.categorie, forum_topics.bericht AS topicbericht,
	forum_reacties.id, forum_reacties.topic_key, forum_reacties.schrijver, forum_reacties.categorie, forum_reacties.bericht AS forumbericht
	FROM forum_topics
	RIGHT JOIN forum_reacties
	ON forum_topics.id = forum_reacties.topic_key 
	WHERE forum_topics.id = '". $topicid ."' 
	AND forum_reacties.topic_key = '". $topicid ."' 
	ORDER BY forum_reacties.id ASC
	") or die(mysql_error());
	
//  ON forum_topics.id = forum_reacties.topic_key 
  	$cl = 1; // Begin waarde kleuren voor regels
	$count = 2;
	$kleur1 = "#CFCFCF"; // Onevenkleuren  
	$kleur2 = "#FFF"; // Even kleuren
  
  print("<table id=\"$count\" border=\"1\"  width=\"480\" style=\"width: 480;\"  class=\"artheader\">");
  

   }
  
  while($rat = mysql_fetch_array($query3)) // WHILE voor de reacties :P
  {
    if($cl % 2){$kleur=$kleur2;} else {$kleur = $kleur1; } // Om en om kleuren genereren voor regels.
  
    $topicid 	= $rat['id'];
	$topic_key  = $rat['topic_key'];
	$categorie 	= $rat['categorie'];
	$onderwerp  = $rat['onderwerp'];
	$topic_bericht    = $rat['topicbericht'];
	$reactie_bericht    = $rat['forumbericht'];
	$schrijver  = $rat['schrijver'];
	
	if($count < 3)
	{  
		print("<tr><td colspan=\"2\">$onderwerp</td></tr>"); 
		print("<tr><td width=\"110\" style=\"  width: 110;\" valign=\"top\" bgcolor=\"$kleur1\">$schrijver</td>");
		print("<td width=\"370 \" style=\"width: 370; \" bgcolor=\"$kleur1\" >$topic_bericht</td></tr>");
	}
	
	print("<tr><td width=\"110\" style=\"  width: 110;\" valign=\"top\" bgcolor=\"$kleur\">$schrijver</td>");
    print("<td width=\"370 \" style=\"width: 370; \" bgcolor=\"$kleur\" >$reactie_bericht</td></tr>");
	
    
	$cl++;
	$count++;
	
  }
  
  print("</table>");


Ik hoop dat iemand me hierbij nog kan helpen

Maak van de RIGHT JOIN eens een LEFT JOIN ;)
[edit]
Als je de tutorial van mij hebt gelezen (onderste in het lijstje met laatste tutorials) dan is je misschien wel duidelijk wat het verschil is. Deze draait de tabellen net andersom:
- waarbij in een LEFT JOIN eerst zal worden gekeken naar de 1st genoemde tabel, de tabel met topics, en van daaruit wordt je koppeling gelegd

En bij een RIGHT JOIN is dit net andersom, dan gaat die kijken naar reacties en zoekt daar het topic bij.

De LEFT JOIN zal voor jou dus het gewenste resultaat geven.
[/edit]
Geen verschil

dit heb ik geprobeerd

FROM forum_topics
LEFT JOIN forum_reacties


dit heb ik geprobeerd

FROM forum_reacties
LEFT JOIN forum_topics


Ook heb ik RIGHT en INNER geprobeerd.

Nu even de tut lezen

@vlerknozem

Das wel raar, probeer eens een OUTER JOIN dan..

Reageren