Shadow1701
Ensign
- Registriert
- Juli 2012
- Beiträge
- 239
Wiedereinmal arbeite ich an meiner Filme und Serien Datenbank, diesmal geht es um die Suche.
Ich hoffe ich bekomme das hier verständlich beschrieben.
Die Suche funktioniert über einen Suchindex mit diesen Tabellen:
Jetzt sollen ALLE Suchwörter (in diesem Beispiel sind es zwei: 'mission' und 'impossible') im Titel und in der Beschreibung zu finden sein. Es ist ein Titel (searchmatch.istitle=1) oder eine Beschreibung (searchmatch.istitle=0).
Ich bekomme die Suche nach Titel ODER nach Beschreibung hin. Die Suche nach Titel UND Beschreibung schaffe ich nicht, mein Hirn ist was den logischen Denkprozess angeht offenbar blockiert.
Das ist die Abfrage nach dem Titel, die auch einwandfrei funktioniert:
Entscheidend ist hier die Zeile "AND searchmatch.istitle IN (1)"
Die Suche funktioniert einwandfrei nach
AND searchmatch.istitle IN (1)
oder nach
AND searchmatch.istitle IN (0)
Aber nicht nach AND searchmatch.istitle IN (0,1)
Kann mir bitte jemand auf die Sprünge helfen wie ich das GROUP BY unter Berücksichtigung von ZWEI Suchwörtern sowohl für searchmatch.istitle=0 AND searchmatch.istitle=1 hinbekomme?
(searchmatch.istitle=0 muss beide Suchwörter enthalten UND searchmatch.istitle=1 muss beide Suchwörter enthalten)
Ich hoffe ich bekomme das hier verständlich beschrieben.
Die Suche funktioniert über einen Suchindex mit diesen Tabellen:
--
-- Tabellenstruktur für Tabellesearchindex
--
CREATE TABLEsearchindex
(
wordid
int(11) NOT NULL,
word
char(255) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabellesearchmatch
--
CREATE TABLEsearchmatch
(
matchid
int(11) NOT NULL,
id
int(11) NOT NULL,
fileid
int(11) NOT NULL,
istitle
int(1) NOT NULL,
filekind
int(1) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
Jetzt sollen ALLE Suchwörter (in diesem Beispiel sind es zwei: 'mission' und 'impossible') im Titel und in der Beschreibung zu finden sein. Es ist ein Titel (searchmatch.istitle=1) oder eine Beschreibung (searchmatch.istitle=0).
Ich bekomme die Suche nach Titel ODER nach Beschreibung hin. Die Suche nach Titel UND Beschreibung schaffe ich nicht, mein Hirn ist was den logischen Denkprozess angeht offenbar blockiert.
Das ist die Abfrage nach dem Titel, die auch einwandfrei funktioniert:
SQL:
SELECT
movie.mvid, movie.mvname_de, movie.mvname_or, movie.mvdescription, movie.mvimage, movie.mvyear, movie.mvcountry, movie.mvfileid, movie.mvruntime, movie.mvsortnr,movie.mvactortpl,
genre.gname, genre.gid,
category.cname,
file.fileid, file.fsize, file.fpath, file.fname, file.fchid,
drive.dpath,
channel.chname, channel.chnr, channel.chimage,
COUNT(*) FROM searchindex
LEFT JOIN `searchmatch` ON (searchindex.wordid=searchmatch.matchid)
LEFT JOIN `movie` ON (searchmatch.id=movie.mvid)
LEFT JOIN `genre` ON (movie.mvgid=genre.gid)
LEFT JOIN `category` ON (movie.mvcatid=category.cid)
LEFT JOIN `file` ON (movie.mvfileid=file.fileid)
LEFT JOIN `drive` ON (drive.did=file.fpathid)
LEFT JOIN `channel` ON (file.fchid=channel.chid)
WHERE word IN ('mission','impossible')
AND searchmatch.filekind=1
AND searchmatch.istitle IN (1)
GROUP BY id HAVING COUNT(*) = 2 ORDER BY genre.gname, category.cname, movie.mvname_de, movie.mvsortnr;
Entscheidend ist hier die Zeile "AND searchmatch.istitle IN (1)"
Die Suche funktioniert einwandfrei nach
AND searchmatch.istitle IN (1)
oder nach
AND searchmatch.istitle IN (0)
Aber nicht nach AND searchmatch.istitle IN (0,1)
Kann mir bitte jemand auf die Sprünge helfen wie ich das GROUP BY unter Berücksichtigung von ZWEI Suchwörtern sowohl für searchmatch.istitle=0 AND searchmatch.istitle=1 hinbekomme?
(searchmatch.istitle=0 muss beide Suchwörter enthalten UND searchmatch.istitle=1 muss beide Suchwörter enthalten)