Forum ophalen met 1 mysql query en in 1 array stoppen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Dominique

Dominique

11/10/2008 04:23:00
Quote Anchor link
Hoi,

Ik wil graag met 1 mysql query een forum overzicht ophalen en in een array stoppen.

Je hebt dus:
- forum_categories (forum categorieen)
Deze tabel bevat alle gegevens over een categorie

- forum_categories_moderators (forum moderators)
Deze tabel bevat de velden catID en userID

- users_profiles (gebruikers)
Tot slot bevat deze tabel de gegevens van gebruikers. Doormiddel van ID's kan ik zo de gebruikersnaam ophalen uit die tabel.

Mijn probleem is echter dat ik met smarty werk en alles dus in een array moet gooien. Ik heb al 4 dagen lopen rotzooien met LEFT JOINS en INNER JOINS en kom er niet meer uit. Ik wil graag dat hij een lijst van moderators bij de juiste forum categorie zet. Dat word dus een lus in een lus. Ik wil dit allemaal in 1 array stoppen met 1 mysql query.

Weet iemand wat de beste (of in elk geval alsjeblieft een werkende) methode is om alle data op deze manier in een array te stoppen en te parsen naar smarty?

Met een LEFT JOIN voegt hij bij elke 'moderator' een hele nieuwe rij toe waardoor ik ineens dubbele categorieen te zien krijg. Dat terwijl ik die gegevens juist in een array wil hebben.

Ik zie door de bomen het bos niet meer, bedankt!

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
20
21
22
23
24
25
26
27
<?php
public function get_categories() {
    $query = '
        SELECT
            *,
            cats.ID AS ID,
            mods.userID AS mID,
            moderator.username AS musername,
            author.username AS lpauthor,
            DATE_FORMAT(cats.lpdatetime, "%d %b %Y om %H:%i") AS lpdatetime
        FROM
            forum_categories AS cats
        LEFT JOIN
            forum_categories_moderators AS mods ON cats.ID = mods.catID
        LEFT JOIN
            users_profiles AS author ON cats.lpauthorID = author.ID
        LEFT JOIN
            users_profiles AS moderator ON mods.userID = moderator.ID
        ORDER BY
            cats.listorder'
;
    $result = mysql_query($query) or die(mysql_error());        
    while ($row = mysql_fetch_assoc($result)) {
            $cats[] = $row;
    }

    return $cats;
}

?>


Geeft dit:
http://i5.photobucket.com/albums/y199/Ne0que/forumss.jpg
Gewijzigd op 01/01/1970 01:00:00 door Dominique
 
PHP hulp

PHP hulp

11/01/2025 13:06:51
 
Eddy E

Eddy E

11/10/2008 08:32:00
Quote Anchor link
Een subquery voor de moderators?
Niet getest, maar zoiets:

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
20
21
22
23
24
25
26
27
28
<?php
public function get_categories() {
    $query = '
        SELECT
            *,
            cats.ID AS ID,
            mods.userID AS mID,
            moderator.username AS musername,
            author.username AS lpauthor,
            DATE_FORMAT(cats.lpdatetime, "%d %b %Y om %H:%i") AS lpdatetime,
            (SELECT * FROM user_profiles WHERE rank < 2) AS moderators
        FROM
            forum_categories AS cats
        LEFT JOIN
            forum_categories_moderators AS mods ON cats.ID = mods.catID
        LEFT JOIN
            users_profiles AS author ON cats.lpauthorID = author.ID
        LEFT JOIN
            users_profiles AS moderator ON mods.userID = moderator.ID
        ORDER BY
            cats.listorder'
;
    $result = mysql_query($query) or die(mysql_error());        
    while ($row = mysql_fetch_assoc($result)) {
            $cats[] = $row;
    }

    return $cats;
}

?>


Heb er dus een subquery in gemaakt (bij je SELECT).
Daar selecteer je dus de moderators (en zal, denk ik, een subarray geven in je array).
Hoe je de moderators bij de goede categorie geeft: geen idee.
Kwestie van proberen.
 
Dominique

Dominique

11/10/2008 09:00:00
Quote Anchor link
Hmm ik wist niet dat dat kon, maar bedankt.
 
Dominique

Dominique

11/10/2008 19:19:00
Quote Anchor link
Nou blijf ik alsnog met een probleem zitten.

"Subquery returns more than 1 row"

Natuurlijk kan een forum meerdere moderators hebben. Ik heb mijn database structuur ietsjes aangepast. Er zijn 2 moderators voor elk forum. Zit er dan echt niks anders om dan voor elk forum in een loop queries voor moderators gaan zitten uitvoeren? Ik moet toch meerdere rijen kunnen invoegen bij een subquery? Dit is mijn code nu:

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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?
public function get_categories() {
    $query = '
        SELECT
            forums.ID AS ID,
            forums.title,
            forums.description,
            forums.posts,
            forums.topics,
            forums.lptopicID,
            forums.lpID,
            DATE_FORMAT(forums.lpdatetime, "%d %b %Y om %H:%i") AS lpdatetime,
            forums.lpauthorID,
            user.username AS lpauthorname,
            cats.title AS category,
            (SELECT userID FROM board_moderators AS mods WHERE mods.forumID = forums.ID) AS moderators
        FROM
            board_forums AS forums
        INNER JOIN
            board_categories AS cats ON cats.id = forums.catID
        INNER JOIN
            users_profiles AS user ON user.ID = forums.lpauthorID
            '
;
    $result = mysql_query($query) or die(mysql_error());        
    while ($row = mysql_fetch_assoc($result)) {
        // Making URLS                
        $row['forumURL'] = 'index.php?module=forum&page=forum&id='.$row['ID'];
        $row['lptopicURL'] = 'index.php?module=forum&page=topic&id='.$row['lptopicID'];
        $row['lpURL'] = $row['lptopicURL'].'#'.$row['lpID'];
        $row['lpauthorURL'] = 'index.php?module=user&page=profile&id='.$row['lpauthorID'];
        
        $cats[] = $row;
    }

    return $cats;
}

?>


Niet Bumpen::
Twee of meer keer achter elkaar in een topic posten heet bumpen. Bumpen is pas na 24 uur toegestaan en kan een reden zijn voor de admins en moderators om een topic te sluiten. Gebruik indien nodig de Afbeelding knop om je tekst aan te passen.

SanThe.
Gewijzigd op 01/01/1970 01:00:00 door Dominique
 



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.