Hoihoi Tweakers!
Onderaan deze post staat de uitleg welke velden de verschillende tabellen allemaal gebruiken, het probleem is als volgt.
Op mijn website staan allemaal foto's, elke mediabase-item bevat een titel, mediainfo (omschrijving) en minimaal een foto. De filename van de foto of meerdere foto's staan in de table mediabase_items.
Elk mediabase-item wordt voorzien van een label (tag), deze tag staat in de tabel tags, het kan voorkomen als een mediabase-item meer dan een label heeft, daarom heb ik er een tags_koppel bij geplaatst.
Nu heb ik een zoekfunctie gemaakt, werkt prima, maar is nog niet helemaal naar wens.
Voorbeeld
Er is een mediabase-item met als titel 'jongen valt in het water', en heeft als verhaaltje 'de jongen viel met fiets en al in het water vlakbij zijn school'.
De labels van dit item worden: fiets, water, zwemmen
Er wordt gezocht op 'zwemmen', dan zal hij dit item niet vinden, omdat zwemmen niet in het titel en niet in de tekst voorkomt. Daarom heb ik het onderstaande query bedacht, nu werkt het prima, maar zit ik gewoon te wachten voordat er resultaat uit komt.
Wat doe ik verkeerd en hoe kan dit opgelost worden?
table: mediabase
id
active (zichtbaar of niet zichtbaar voor bezoekers)
title
mediainfo
post_date
table: mediabase_items
id
mediaid
filename
table: tags
id
name
table: tags_koppel
itemid (verwijzing naar mediabase.id)
tagsid
Onderaan deze post staat de uitleg welke velden de verschillende tabellen allemaal gebruiken, het probleem is als volgt.
Op mijn website staan allemaal foto's, elke mediabase-item bevat een titel, mediainfo (omschrijving) en minimaal een foto. De filename van de foto of meerdere foto's staan in de table mediabase_items.
Elk mediabase-item wordt voorzien van een label (tag), deze tag staat in de tabel tags, het kan voorkomen als een mediabase-item meer dan een label heeft, daarom heb ik er een tags_koppel bij geplaatst.
Nu heb ik een zoekfunctie gemaakt, werkt prima, maar is nog niet helemaal naar wens.
Voorbeeld
Er is een mediabase-item met als titel 'jongen valt in het water', en heeft als verhaaltje 'de jongen viel met fiets en al in het water vlakbij zijn school'.
De labels van dit item worden: fiets, water, zwemmen
Er wordt gezocht op 'zwemmen', dan zal hij dit item niet vinden, omdat zwemmen niet in het titel en niet in de tekst voorkomt. Daarom heb ik het onderstaande query bedacht, nu werkt het prima, maar zit ik gewoon te wachten voordat er resultaat uit komt.
Wat doe ik verkeerd en hoe kan dit opgelost worden?
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| SELECT mediabase.id, mediabase.title, mediabase.mediainfo, mediabase_items.filename FROM ( mediabase, (SELECT itemid FROM tags_koppel LEFT JOIN tags ON tags_koppel.tagsid = tags.id WHERE tags.name LIKE '%zwemmen%') AS t ) LEFT JOIN mediabase_items ON mediabase.id = mediabase_items.mediaid WHERE mediabase.active = 1 AND mediabase.id = t.itemid OR mediabase.active = 1 AND (mediabase.title LIKE '%zwemmen%' OR mediabase.mediainfo LIKE '%zwemmen%') GROUP BY mediabase.id ORDER BY mediabase.post_date DESC |
table: mediabase
id
active (zichtbaar of niet zichtbaar voor bezoekers)
title
mediainfo
post_date
table: mediabase_items
id
mediaid
filename
table: tags
id
name
table: tags_koppel
itemid (verwijzing naar mediabase.id)
tagsid