Avatar billede dj-sejler Praktikant
21. maj 2005 - 20:04 Der er 8 kommentarer og
1 løsning

hvordan får man ét bestemt ord ud af en sql-felt

Hej

hvis man i et text-felt i MySQL har en masse søge ord sepereret med ; (semikolon) hvordan skal man så lave sin SQL for at få de række hvor et bestem ord er med i feltet?

eks
linie 1: fisk; hund; grøn bil; hus; nederst;
linie 2: kat; blå bil; øverst;

og så skal man have alle de linier med eksempelvis hund
Avatar billede barklund Nybegynder
21. maj 2005 - 20:11 #1
Hm, det er bestemt ikke en database-venlig struktur, men når nu du har lavet det sådan, så er det:

mysql_query("SELECT * FROM tabel WHERE felt RLIKE '(^|; *)" . $ord . "(;|\$)'");

Tror jeg vil virke :)

--
Morten Barklund
Avatar billede dj-sejler Praktikant
21. maj 2005 - 20:12 #2
hvordan skal man ellers gøre det?
Avatar billede barklund Nybegynder
21. maj 2005 - 20:26 #3
Du bør lave en ny tabel med en række for hvert ord der så også har et id, der passer til den første tabel - altså hvor der så kun står:

1 | fisk
1 | hund
1 | grøn bil
1 | hus
1 | nederst
2 | kat
2 | blå bil
2 | øverst

Så kan man søge efter ordet heri og finde alle de rækker, der indeholder det. Det vil gå markant hurtigere. Der skal selvfølgelig være et indeks på ord-søjlen for at du kan søge hurtigt i den :)

--
Morten Barklund
Avatar billede barklund Nybegynder
21. maj 2005 - 20:27 #4
Skal det være endnu mere optimalt og køre stærkere, så har du en tredje tabel til ord. Altså en tabel til linjerne, en tabel til ord og en sidste tabel til relationen. Men det afhænger af, hvor hurtigt det skal gå :)
Avatar billede dj-sejler Praktikant
21. maj 2005 - 20:44 #5
hmmm..

Det er til et billedegalleri hvor jeg har en masse data om selve billedet, hvor jeg så har haft 3 felt til søgeord...
  key_person
  key_location
  key_event

kan du ikke så ikke beskrive hvordan du ville gøre det, sådan lidt mere?!?
Avatar billede barklund Nybegynder
22. maj 2005 - 00:22 #6
Så har du en tabel som:

CREATE TABLE image_word (
    image INT(11) NOT NULL,
    type ENUM('person','location','event') NOT NULL
    word VARCHAR(20)
)

Og så indsætter du i den for hvert ord hørende til person:

foreach (explode(";",$personwords) as $personword) {
    mysql_query("INSERT INTO image_word VALUES($imageid, 'person', '$personword');");
}

--
Morten Barklund
Avatar billede dj-sejler Praktikant
17. september 2005 - 18:09 #7
jeg får ikk gjort noget ved det nu, men det ser meget godt, så vidst du giver et svar får du pointene ellers lukker jeg selv.
Avatar billede barklund Nybegynder
18. september 2005 - 15:42 #8
Helt fint - spørg bare igen, når du kommer til at skulle implementere det :)
Avatar billede dj-sejler Praktikant
18. september 2005 - 23:18 #9
lukker så...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester