Visa ett inlägg
Oläst 2010-01-09, 03:08 #4
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Citat:
Ursprungligen postat av youheardit Visa inlägg
Tjenare!

Sitter nu och försöker skriva en fråga, har allt i huvudet men kan inte riktigt få det till en fråga i mySQL, har nu suttit i någon vecka med denna kluriga fråga och hoppas någon här inne kan hjälpa lite?

jag har en db-tabell med låt oss säga artiklar, eller iaf långa texter.
Sedan har jag en tabell med namn (personer) och även en annan tabell med taggar till namnen (med 3 kolumner, ena id, vanligt auto_increment, sedan person_id, IDt på personen i tabellen personer, och till sist taggen)

Nu vill jag att med helst en fråga leta upp om namnen eller taggarna existerar i texten och isåfall visa vilka taggar som existerar i texten...

har testat med allt möjligt, regexp (visar ju inte vilka taggar, bara om dem finns) LIKE är kanske ingen idé... mm!

Tacksam för hjälp!

Med vänliga hälsningar!
//Philip Andersson!
Kan du berätta vad du ska ha taggarna till?

Det beror på vad du ska ha taggarna till, är det en typ av koppling mellan en "tagg" (eg särskilda nyckelord) och en artikel du vill ha för att snabbt hitta till en specifik artikel. I så fall bör man ha en uppsättning tabeller ungefär så här:

Tabell: ARTIKEL
- ArtikelId (Primärnyckel)
- ArtikelText (String)

Tabell: PERSON
- PersonId (Primärnyckel)
- Namn (String)

Tabell: TAG
- TagId (Primärnyckel)

Tabell: ARTIKEL_TAG
- ArtikelId (Primärnyckel) (Främmande nyckel till Tabell: ARTIKEL)
- TagId (Primärnyckel) (Främmande nyckel till Tabell: TAG)



Om du sen ska få fram en lista på alla artiklar som innehåller taggen "Gurka" så skriver du så här i SQL:

Kod:
SELECT *
FROM Artikel a
WHERE a.ArtikelId 
IN 
(SELECT t.ArtikelId FROM Artikel_Tag t WHERE t.TagId 
      IN ('Gurka', 'Melon', 'Banan') 
)
I ovanstående kod kommer alla artiklar upp som har en koppling till endera 'Gurka', 'Melon' eller 'Banan'...

Fördelen med detta sätt är att det blir blixtsnabba sökningar. Använder du fritextsökning så kommer SQL tvingas göra en tablescan (dvs gå igenom varenda rad i hela databasen för varje sökning) medan den kod jag presenterade ovan endast gör en effektiv indexsökning och därmed blir den blixtsnabb.

Senast redigerad av Conny Westh den 2010-01-09 klockan 03:20
Conny Westh är inte uppkopplad   Svara med citatSvara med citat