webForumDet fria alternativet

Söka bland indexerade ord

Databaser & SQL

0 svar · 302 visningar · startad av The_Hulk

Medlem sedan juni 20031 837 inlägg
Frågan#1

Table: Word (word_id, word)
Data:
1 | This
2 | is
3 | a
4 | test
5 | another
6 | webForum

Table: Title (title_id, created)
Data:
1 | 2009-10-01
2 | 2009-10-02
3 | 2009-10-02

Table: Title_Word (title_id, word_id, word_order)
1 | 1 | 1
1 | 2 | 2
1 | 3 | 3
1 | 4 | 4
2 | 1 | 1
2 | 2 | 2
2 | 5 | 3
2 | 4 | 4
3 | 6 | 1
4 | 1 | 1
4 | 4 | 2

Alltså fyra titlar
1 - This is a test
2 - This is another test
3 - webForum
4 - This test

Jag vill kunna söka bland titlarna, kan inte komma på hur jag ska få ihop SQL-frågan så att jag bara får ut de titlar som matchar alla ord man söker på.

Sökning:
"This is" => 1, 2
"is a" => 1
"test" => 1, 2, 4

Nästa steg är att få så att sökningen kräver att orden är i rätt ordning.
Sökning:
"is test" => inget
"This test" => 4

Använder PHP och MySQL, versionerna har jag inte riktigt koll på.

Jag försökte titta lite på hur phpBB hade gjort, nackdelen var att deras php-sida för sökning var på ca 1400 rader. Det verkade som att de gjorde en sökning för varje ord och sen slog ihop resultaten. Måste man göra det eller kan man få ihop det i en enda sql-fråga?

Någon som kan hjälpa mig med hela frågan eller kanske guida mig i rätt riktning?

250 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)