Entwickler-Ecke

Sonstiges (Web-Entwicklung) - Mysql Suche nach Blog-Tags


Regan - So 04.01.09 14:39
Titel: Mysql Suche nach Blog-Tags
Hallo,
ich programmiere gerade einen Blog. Ich habe dort eine Spalte "blog_tags"(VarChar(255)), die sämtliche Tags beinhaltet, die mit dem Eintrag vorhanden sind.
Wenn der Nutzer nun einen speziellen Tag auswählt, dann sollen alle Beiträge angezeigt werden, die in den Blog-Tags den speziellen Tag haben.
Wie sieht dazu die Abfrage aus? Ich habe es schon mit Like und dem Tag versucht, allerdings kommt dann immer kein Ergebnis heraus.

MfG
Regan


BenBE - So 04.01.09 14:53

Im Normalfall speichert man jeden Tag als eigenen Eintrag in einer Tabelle und verknüpft die einzelnen Blog-Posts.

Zeig mal deine bisherige Abfrage (und Tabellenstruktur).


Heiko - So 04.01.09 16:50

Und wie sind die Tags getrennt? Mit Komma, Leerzeichen etc.?


Regan - Mo 05.01.09 16:55

Ich habe meine Like-Variante auf eine Match-Variante umgepolt. Die funktioniert allerdings genauso wenig.
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Im Normalfall speichert man jeden Tag als eigenen Eintrag in einer Tabelle und verknüpft die einzelnen Blog-Posts.

Wir sind doch alle nicht ganz normal :wink: .
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Zeig mal deine bisherige Abfrage (und Tabellenstruktur).

Kommt sofort. Ich bekomme sogar einen Fehler! "Filme" ist hier mein Suchwort.
Zitat:

Erroneous Query.

Query:

SELECT blog_id, blog_title, blog_cat, blog_created_time AS blog_time, blog_poster_id AS poster_id FROM blog WHERE match(blog_tags) against('filme') ORDER BY blog_created_time DESC

Error:

Can't find FULLTEXT index matching the column list

user profile iconHeiko hat folgendes geschrieben Zum zitierten Posting springen:
Und wie sind die Tags getrennt? Mit Komma, Leerzeichen etc.?

Durch Leerzeichen.

Gibt es auch eine andere Möglichkeit?


Delete - Mo 05.01.09 17:22

Normalisiere Deine DB und Du hast diese Probleme nicht.

[edit] Beispiel:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
Tabelle Blogs:
==============
Blog_ID (PK)
Titel
...

Tabelle Tags:
=============
Tag_ID (PK)
Bezeichnung
...

Tabelle BlogTags:
=================
Blog_ID (FK)
Tag_ID (FK)  //beide Schlüssel zusammen als PK


Um nun die Blogs zu listen, in denen das Tag "filme" vorkommt, musst Du nur über die Zuordnungstabelle joinen.

SQL-Anweisung
1:
2:
3:
4:
5:
SELECT B.Bezeichnung
FROM Blogs B
JOIN BlogTags BT ON BT.Blog_ID = B.Blog_ID
JOIN Tags T ON T.Tag_ID = BT.Tag_ID
WHERE T.Bezeichnung = 'filme'
[/edit]


Regan - Mo 05.01.09 17:51

Vielen Dank für deine Antwort.
Das ist zwar schön und würde sicherlich funktionieren. Ich würde aber gern meine Variante anwenden wollen :wink: . Auch dafür muss es ja eine Lösung geben.


Delete - Mo 05.01.09 17:57

Hast Du denn auch einen FULLTEXT definiert? Siehe http://dev.mysql.com/doc/refman/5.0/en/fulltext-natural-language.html [http://dev.mysql.com/doc/refman/5.0/en/fulltext-natural-language.html]


Regan - Mo 05.01.09 19:09

user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
Hast Du denn auch einen FULLTEXT definiert? Siehe [url=http://dev.mysql.com/doc/refman/5.0/en/fulltext-natural-language.html]http://dev.mysql.com/doc/refman/5.0/en/fulltext-natural-language.html[/url]

Nein :oops: . Das wusste ich gar nicht, dass ich das machen muss, bzw. war mir dem gar nicht bewusst. Jetzt verstehe ich auch die Fehlermeldung :autsch: .
Danke für die Hilfe :zustimm: .