Avatar billede andreas13_fam Nybegynder
21. april 2009 - 21:44 Der er 6 kommentarer og
1 løsning

brug af flere match

Hej eksperter
Spørgsmålet er meget simpelt hvordan bruger man 2 match (IN BOOLEAN MODE) på 2 rækker

Lad os sige at jeg har tabellen
| id | navn | indhold | land |
| 1 | abe | en abe spiser bananer | Afrika |

Jeg vil så godt søge efter "abe" i navn og indhold, men sammentidlig også søge efter " Afrika" i land
Avatar billede CCodam Nybegynder
21. april 2009 - 22:02 #1
Jeg forstår ikke helt hvad det er du ønsker at få som resultat?

Vil du have alle rækker som indeholder "abe" i enten navn eller indhold, og alle rækker der indeholder "afrika" i land?

Eller kun rækkter der indeholder "abe" i enten navn eller indholder, samtidigt med at de indeholder "afrika" i land?
Avatar billede andreas13_fam Nybegynder
22. april 2009 - 07:29 #2
Mulighed 1, men der skal ligges vægt på navn, og abe må godt forkomme i både navn og indhold
Avatar billede CCodam Nybegynder
22. april 2009 - 09:02 #3
#2 Hvordan vil du ligge vægt på navn? Mener du sådan at den sortere efter navn først?

Prøv med:
SELECT * FROM table WHERE navn LIKE '%abe%' OR indhold LIKE '%abe%' OR land LIKE '%afrika%' ORDER BY navn, indhold, afrika

Denne vil tjekke om en række enten indeholder abe i navn, abe i indhold, eller afrika i land, og tage den med, hvis den opfylder en af kriterierne.

Det siges at Like '%abe%' betyder at det der står i rækken bare skal indeholde ordet abe, da % betyder hvilket som helst tegn, så mange gange som nødvendigt.

Derudover vil den derefter sortere rækkerne alfabetisk, først efter navn, derefter efter indhold og til sidst efter land
Avatar billede andreas13_fam Nybegynder
22. april 2009 - 17:46 #4
Jeg søger snare noget alla

SELECT * FROM table WHERE ((navn LIKE '%abe%' OR indhold LIKE '%abe%') AND (land LIKE '%afrika%'))

Det med at ligge vægt på navn betyder at hvis du nu har tabel

::Jeg ved ikke om det visses rigtigt pga. skrift-type::
| id | navn  | indhold                          | land  |
+----+-------+-----------------------------------+--------+
| 1  | abe  | en abe spiser bananer            | Afrika |
| 2  | banan | at aber spiser bananer er en løgn | Afirka |
| 3  | abe  | aben og fluen er ikke gode venner | Afrika |

Så vil id:1 komme først herefter id:3 og til sidst id:2
Fordi at selv om abe forekommer i 'navn' eller 'indhold' så er 'navn' vigtigst.

Mit mål er ikke at bruge like='% %' men match()

hvis jeg bare skulle søge efter abe i 'navn' og 'indhold' ville det se sådan ud i min verden.

SELECT DISTINCT MATCH(navn, indhold) Against ('abe' IN BOOLEAN MODE) as score, id, navn, indhold, land
FROM articles
WHERE MATCH(navn, indhold) Against ('abe' IN BOOLEAN MODE)
ORDER BY score DESC
Avatar billede andreas13_fam Nybegynder
22. april 2009 - 17:48 #5
Bare for sjov.
| id  | navn  | indhold                                                | land    |
+----+----------+-----------------------------------------------+---------+
| 1  | abe      | en abe spiser bananer                      | Afrika |
| 2  | banan | at aber spiser bananer er en løgn  | Afirka |
| 3  | abe      | aben og fluen er ikke gode venner | Afrika |
Avatar billede andreas13_fam Nybegynder
23. april 2009 - 14:55 #6
nogen der kan hjælpe ?
Avatar billede andreas13_fam Nybegynder
06. maj 2009 - 13:48 #7
SVAR:
man kan tilsynladene kun sortere efter en match()
men kan kan godt bruge mere end en match i WHERE

SELECT DISTINCT MATCH(navn, indhold) Against ('abe' IN BOOLEAN MODE) as score, id, navn, indhold, land
FROM articles
WHERE (MATCH(navn, indhold) Against ('abe' IN BOOLEAN MODE))
AND (MATCH(andet) Against ('andet' IN BOOLEAN MODE))
ORDER BY score DESC
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
Computerworld tilbyder specialiserede kurser i database-management

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