Kom ihåg mig?
Home Menu

Menu


väldigt komplicerad mySQL fråga! lite hjälp

Ämnesverktyg Visningsalternativ
Oläst 2010-01-06, 01:46 #1
youheardit youheardit är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2008
Inlägg: 1 168
youheardit youheardit är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2008
Inlägg: 1 168
Comment väldigt komplicerad mySQL fråga! lite hjälp

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!
youheardit är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-01-06, 01:49 #2
NeoTech NeoTech är inte uppkopplad
Medlem
 
Reg.datum: Sep 2006
Inlägg: 90
NeoTech NeoTech är inte uppkopplad
Medlem
 
Reg.datum: Sep 2006
Inlägg: 90
Låter som att Joins är enklaste sättet här.. finns det en referens tabell som säger hur artiklarna kopplas till personerna med?!

typ "select <whatever> from artiklar a left join personer p on a.person_id = a.person_id left join taggar t on p.person_id = t.person_id where <filtrera med like eller regexp o vikta efter behovet>";
NeoTech är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-01-08, 18:27 #3
KarlRoos KarlRoos är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jul 2007
Inlägg: 1 416
KarlRoos KarlRoos är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jul 2007
Inlägg: 1 416
Kod:
$sql = 'SELECT taggar.tagg, person.namn FROM `taggar` JOIN `person` ON taggar.person_id = person.person_id WHERE';

$first = true;
foreach(explode(' ',strip_tags($content)) as $word)
{
	if(!$first) $sql .= ' OR';
	$first = false;

	$sql .= ' MATCH(taggar.tagg) AGAINST ("%'.$word.'%")';
}

$result = mysql_query($sql);
Blir väldigt tungt då den söker på varje ord, men borde funka (OTESTAT!)

Lycka till.
KarlRoos är inte uppkopplad   Svara med citatSvara med citat
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
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 05:06.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017