Ikben bezig met sectie widgets bestaande uit drie tafels, teweten:

1. site_widgets (widget_id, widget_name)

2. widget_content (content_id, widget_id, heading, content) Relatie site_widgets.widget_id => widget_content => widget_id

3. widget_photos (photo_id, rel_id, photo) Relatie: widget_content.content_id => widget_photos.rel_id

Ik ben nu bezig met het CMS gedeelte voor deze sectie. Het probleem dat ik ervaar is dat, alhoewel de meeste widgets gewoon een rij in alle drie de tafels hebben, er twee widgets zijn die 3 rijen hebben in de widget_content en widget_photos tafels. Voorbeeld:

Tafel site_widgets:
widget_id 1 | widget_name Opening dates

Tafel widget_content:
content_id 1 | widget_id 1 | heading Spring season etc etc
content_id 2 | widget_id 1 | heading Summer season etc etc
content_id 3 | widget_id 1 | heading Spring season etc etc

Tafel widget_photos:
photo_id 1 | rel_id 1 | spring.jpg
photo_id 2 | rel_id 2 | summer.jpg
photo_id 3 | rel_id 3 | fall.jpg

Ik weet echter niet hoe de query er uit moet zien zodat zowel de standaard widgets (een rij in de drie tafels als de afwijkende widgets zoals hierboven het juiste resultaat opleveren:

Ik heb het volgende geprobeerd

	public function get_widget_details($string)
	{
		$sql	=	"SELECT SW.widget_name
		                  , SW.url_string 
                          , WC.*
                          , WP.photo
                       FROM site_widgets SW
                       LEFT 
                       JOIN widget_content WC
                         ON SW.widget_id = WC.widget_id
                       LEFT
                       JOIN widget_photos WP
                         ON WC.content_id = WP.rel_id
                      WHERE SW.url_string = ?";
					  
		$stmt	=	$this->pdo->prepare($sql);
		$stmt->execute(array($string));		
		return $stmt->fetch();	
	}

Ik heb het met een RIGHT JOIN geprobeerd maar krijg het niet voor elkaar

Ziet iemand wat ik fout doe? Alvast bedankt
Wat is het resultaat dat je verwacht en wat krijg je nu?
@Ben van Velzen Het probleem zit hem in de fetch en/of fetchAll. Voor de widgets met slechts 1 rij in elk van de drie tafels zou ik eigenlijk fetch moeten gebruiken. Doe ik dat echter dan krijg ik in de foreach loop voor de widgets met meerder rijen de Illegal string offset melding en andersom
Waarom dump je niet even op je scherm wat je als output krijgt? In je voorbeeld zul je overigens fetchall willen gebruiken gezien je meerdere records terug gaat krijgen.

Reageren