webForumDet fria alternativet

Sökning

6 svar · 632 visningar · startad av Mr T

Mr TMedlem sedan maj 20071 061 inlägg
#1

Har en tabell vid namn "user" :

user
id
nick_name varchar(30)
first_name varchar(30)
family_name varchar(30)

(Inget konstigt med det)

Nu vill jag göra en sökning i denna där användaren ska kunna välja bort vissa namn med hjälp av att skriva - (minus) framför bortvalda ord är frågan hur SQL frågan blir.

om användaren skriver in "sture -karl" vill jag visa jag inte visa
"sture karlsson" inte heller "karl johansson"

Provade med att skapa frågan :
SELECT * FROM user WHERE ((nick_name LIKE '%sture%' OR first_name LIKE '%sture%' OR family_name LIKE '%sture%') ) AND (nick_name NOT LIKE '%karl%' AND first_name NOT LIKE '%karl%' AND family_name NOT LIKE '%karl%') ) ORDER BY nick_name, family_name, first_name

Funkade bra, men ni kanske har påpekande som jag gärna vill höra.

Jesper TMedlem sedan nov. 20017 144 inlägg
#2

Det som är intressant att veta är vilken databas du har, eftersom att ex. mySql har inbyggda funktioner för såndana ändamål.

Mr TMedlem sedan maj 20071 061 inlägg
#3

Det är mySQL som körs på hotelet jag ligger på. Dom kör både 4.1.14 och 5.0.22. Ovanstående tabell ligger på ver 4.1.14, men skulle kuinna flyttas om det finns bättre lösningar under ver 5

visslarenMedlem sedan juli 20011 222 inlägg
#4

Kolla upp mysql's fulltext sökfunktion: http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

Jesper TMedlem sedan nov. 20017 144 inlägg
#5

Ja du har bara att fulltextindexera dina fält så kan du använda minus direkt i din fråga om du använder "contains".

Mr TMedlem sedan maj 20071 061 inlägg
#6

Kan ni ge ett exempel på hur min sql fråga skulle se ut om man använder det ni berättar om ? (låter interesant, men jag är inte säker på att jag helt förstår)

TravoniMedlem sedan okt. 20041 556 inlägg
130 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)