Query voor 3 tafels?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Donald Boers

Donald Boers

02/05/2018 23:07:33
Quote Anchor link
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    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
Gewijzigd op 02/05/2018 23:09:50 door Donald Boers
 
PHP hulp

PHP hulp

25/04/2024 12:58:28
 
Ben van Velzen

Ben van Velzen

02/05/2018 23:13:29
Quote Anchor link
Wat is het resultaat dat je verwacht en wat krijg je nu?
 
Donald Boers

Donald Boers

03/05/2018 00:15:37
Quote Anchor link
@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
 
Ben van Velzen

Ben van Velzen

03/05/2018 01:24:27
Quote Anchor link
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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.