Hey,
Mijn forum bevat delen (categorieën) die alleen voor VIP leden en / of crewleden beschikbaar zijn. Tijdens het doorzoeken van het forum moet ik dus controleren of diegene die zoekt toegang heeft tot bepaalde topics.
Mijn database opzet is als volgt:
- forum_cats
- forum_subcats
- forum_topics
- forum_posts
(ik heb categorieën en subcategorieën apart gehouden, ik weet dat het anders kan, maar dat kan ik nu helaas niet meer 1 2 3 veranderen)
Bij het doorzoeken wordt zowel forum_topics als forum_posts doorzocht op titel, bericht, gebruikersnaam, etc.
Nu moet er dus gecontroleerd worden of de gevonden topics zich in legitieme categorieën bevinden (lees: categorieën waar de gebruiker toegang tot heeft).
Nu kan ik dit in een heel ingewikkelde query gieten, zoiets als:
Bovenstaande query is zo traag als ... (5 joins lijkt mij ook niet echt geschikt), dus dit is geen optie (dit is ook maar een (hele slechte) opzet).
Hebben jullie ideeën hoe ik deze bewerking gemakkelijk kan uitvoeren? Ik had zelf in gedachte om eerst "normaal" te zoeken door alle topics en posts met een (simpele) query en met php de topics er uit filteren. Echter is dit ook zeer omslachtig, aangezien je dan met een foreach loop door alle resultaten moet wandelen en de betreffende topics uit de array filteren.
Mijn forum bevat delen (categorieën) die alleen voor VIP leden en / of crewleden beschikbaar zijn. Tijdens het doorzoeken van het forum moet ik dus controleren of diegene die zoekt toegang heeft tot bepaalde topics.
Mijn database opzet is als volgt:
- forum_cats
- forum_subcats
- forum_topics
- forum_posts
(ik heb categorieën en subcategorieën apart gehouden, ik weet dat het anders kan, maar dat kan ik nu helaas niet meer 1 2 3 veranderen)
Bij het doorzoeken wordt zowel forum_topics als forum_posts doorzocht op titel, bericht, gebruikersnaam, etc.
Nu moet er dus gecontroleerd worden of de gevonden topics zich in legitieme categorieën bevinden (lees: categorieën waar de gebruiker toegang tot heeft).
Nu kan ik dit in een heel ingewikkelde query gieten, zoiets als:
SQL:
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
37
38
39
40
41
42
43
44
| SELECT MAX(forum_posts.id) AS postid, DATE_FORMAT(MAX(forum_posts.datum), '%d-%m-%Y om %H:%i uur') AS postdatum, UNIX_TIMESTAMP(MAX(forum_posts.datum)) AS postdatumunix, MAX(forum_topics.id) AS topicid, MAX(forum_topics.titel) AS topictitel, MAX(forum_topics.sticky) AS topicsticky, MAX(forum_topics.gesloten) AS topicgesloten, ((SELECT COUNT(*) FROM forum_posts WHERE topicid = MAX(forum_topics.id)) - 1) AS reactieaantal, MAX(leden.id) AS topicstarterid, MAX(leden.gebruikersnaam) AS topicstartergebruikersnaam FROM forum_posts INNER JOIN forum_topics ON forum_topics.id = forum_posts.topicid INNER JOIN forum_subcats ON forum_subcats.id = forum_topics.subcat INNER JOIN forum_cats ON forum_cats.id = forum_subcats.cat LEFT JOIN leden ON leden.id = forum_topics.starter LEFT JOIN leden AS ledenposter ON ledenposter.id = forum_posts.lidid WHERE ledenposter.gebruikersnaam = 'keyword' AND forum_cats.id IN (1,2,3,4,5,6,7,8,9,10,11,18,19) GROUP BY forum_posts.topicid |
Bovenstaande query is zo traag als ... (5 joins lijkt mij ook niet echt geschikt), dus dit is geen optie (dit is ook maar een (hele slechte) opzet).
Hebben jullie ideeën hoe ik deze bewerking gemakkelijk kan uitvoeren? Ik had zelf in gedachte om eerst "normaal" te zoeken door alle topics en posts met een (simpele) query en met php de topics er uit filteren. Echter is dit ook zeer omslachtig, aangezien je dan met een foreach loop door alle resultaten moet wandelen en de betreffende topics uit de array filteren.