Avatar billede sbay Nybegynder
05. juli 2005 - 10:10 Der er 15 kommentarer og
1 løsning

søgning i database

Hejsa

Jeg forsøger at søge i min database, men får en fejl i whilesætningen - hvorfor??  (ps. jeg ved at $searchtext indeholder data der er i databasen!)

$resultat = mysql_query("SELECT * FROM GSProfil WHERE MATCH (CompanyName, Branche, AntalMedarb, AntalITUsers, AntalITMedarb, HardwareProfil, SoftwareProfil, NetworkProfil, SolutionProfil, Misc, HvorforMedlem) AGAINST ('$searchtext')");
while ($row = mysql_fetch_array($resultat)) {
$CompanyName = $row['CompanyName'];
$Branche = $row['Branche'];
$AntalMedarb = $row['AntalMedarb'];
$AntalITUsers = $row['AntalITUsers'];
$AntalITMedarb = $row['AntalITMedarb'];
$HardwareProfil = $row['HardwareProfil'];
$SoftwareProfil = $row['SoftwareProfil'];
$NetworkProfil = $row['NetworkProfil'];
$SolutionProfil = $row['SolutionProfil'];
$Misc = $row['Misc'];
$HvorforMedlem = $row['HvorforMedlem'];
}
Avatar billede Slettet bruger
05. juli 2005 - 10:28 #1
Skal vi bare gætte på den fejlmeddelelse?

Jeg vil tro, det er $resulat is not a valid mysql resource.

Hvis mit gæt er korrekt, så skal du prøve at få MySQL's egen fejlmeddelelse frem:

$resultat = mysql_query("SELECT * FROM GSProfil WHERE MATCH (CompanyName, Branche, AntalMedarb, AntalITUsers, AntalITMedarb, HardwareProfil, SoftwareProfil, NetworkProfil, SolutionProfil, Misc, HvorforMedlem) AGAINST ('$searchtext')") or die(mysql_error());
Avatar billede sbay Nybegynder
05. juli 2005 - 13:23 #2
aha! Så får jeg den her: Parse error: parse error, unexpected T_LOGICAL_OR
Avatar billede sbay Nybegynder
05. juli 2005 - 14:13 #3
Fejlen er rettet, men nu får jeg følgende:

-------TEST 1Can't find FULLTEXT index matching the column list

Den påstår at den ikke kan finde TEST 1 som ellers står i kolonnen HardwareProfil... Hvorfor ikke?
Avatar billede Slettet bruger
05. juli 2005 - 17:03 #4
Den siger, at den ikke kan finde et FULLTEXT index, som passer til listen af kolonner. Det skal man have, for at kunne bruge MATCH ... AGAINST. Derudover kræves det, at din tabel er af typen MyISAM.

For at tilføje det index, kan du køre følgende kommando:

ALTER TABLE GSProfil ADD FULLTEXT (CompanyName, Branche, AntalMedarb, AntalITUsers, AntalITMedarb, HardwareProfil, SoftwareProfil, NetworkProfil, SolutionProfil, Misc, HvorforMedlem)

Bemærk, at det kan gå lidt langsommere at tilføje ny rækker i tabellen bagefter, for nu skal den også holde det index opdateret.
Avatar billede sbay Nybegynder
06. juli 2005 - 09:47 #5
hmm - når jeg kører den får jeg denne fejl: #1005 - Can't create table './sv_gsgruppenorg/#sql-1855_641.frm' (errno: 140)
Avatar billede sbay Nybegynder
06. juli 2005 - 10:49 #6
nu har jeg fået et index på inde fra PHPMYADMIN, men så fejler den med:
Can't find FULLTEXT index matching the column list
Avatar billede Slettet bruger
06. juli 2005 - 15:57 #7
Hvad står der præcist i din tabelbeskrivelse nu?
Avatar billede sbay Nybegynder
07. juli 2005 - 09:29 #8
Indekser: 
Nøglenavn Datatype Kardinalitet Handling Feltnavn
PRIMARY  PRIMARY  1      ID 
Branche  FULLTEXT  Intet      Branche 
HardwareProfil  FULLTEXT  Intet      HardwareProfil 
SoftwareProfil  FULLTEXT  Intet      SoftwareProfil 
NetworkProfil  FULLTEXT  Intet      NetworkProfil 
SolutionProfil  FULLTEXT  Intet      SolutionProfil 
Misc  FULLTEXT  Intet      Misc 
CompanyName  FULLTEXT  Intet      CompanyName 
AntalMedarb  FULLTEXT  Intet      AntalMedarb 
AntalITUsers  FULLTEXT  Intet      AntalITUsers 
AntalITMedarb  FULLTEXT  Intet      AntalITMedarb
Avatar billede Slettet bruger
07. juli 2005 - 09:33 #9
Det ser ud til at du har lavet et fulltext index på hver enkelt kolonne. Dit fulltext index skal være på den samlede gruppe af kolonner.
Avatar billede sbay Nybegynder
07. juli 2005 - 09:56 #10
øv :-)

Men det kunne jeg ikke med den kommando du skrev før - så fik jeg en fejl! Hvordan kan jeg så gøre det? Og skal jeg fjerne index på de enkelte kolonner igen?
Avatar billede Slettet bruger
07. juli 2005 - 15:45 #11
Ja, du skal nok fjerne indexet på enkeltkolonnerne - med mindre du også ønsker at bruge fulltext-søgning på dem enkeltvis.

Har du prøvet den kommando, jeg gav i phpmyadmin eller kun fra et phpscript?
Avatar billede sbay Nybegynder
07. juli 2005 - 16:02 #12
ja, nu har jeg prøvet den - og det så ud til at virke denne gang!

Jeg får bare ikke noget retur - selvom jeg ved den streng jeg søger på ligger i databasen?
Avatar billede Slettet bruger
07. juli 2005 - 16:42 #13
Søgningen er beregnet på at finde rækker med de mest relevante resultater. Hvis dit søgeord findes i mindst halvdelen af dine rækker, bliver det anset for et "nul-værdi ord". Det vil på dansk normalt indbefatte ord som: en, et, den, og, det, at.

Dette virker selvfølgelig bedst på større tabeller, for hvis der kun er få rækker i tabellen, er der stor risiko for at et ellers relevant ord forekommer i mange af rækkerne og derfor ignoreres.

Så prøv at tilføje nogle flere rækker, og sørg for at rækkerne indeholder reelt forskellig data.
Avatar billede sbay Nybegynder
08. juli 2005 - 13:23 #14
der er pt kun én række med data, men 10 kolonner - jeg bruger et navn at søge på, og det kan da ikke siges at være så almindeligt!
Avatar billede Slettet bruger
08. juli 2005 - 14:41 #15
Nej, men da MySQL jo skal være ligeglad med hvilket sprog dit indhold er på, er den nødt til bare at gå ud fra indholdet af din tabel. På dansk vil 'et' eller 'den' være ord uden relevans, for de vil forekomme overalt, men på engelsk, vil de normalt være ganske gode søgeord.

Derfor bliver ord regnet for at have mindre søgeværdi, jo større procentdel af rækkerne, de indgår i, og hvis et ord er i halvdelen eller flere af rækkerne, bliver det simpelhen ignoreret, da det ikke er værd at søge efter.

I dit tilfælde er ALLE ord i nøjagtig 100% af rækkerne. 100% er mere end halvdelen, så uanset hvilket ord, du søger efter kommer du ikke til at få noget resultat. Enten vil søgeordet være i 100% af rækkerne og dermed være værdiløst, eller også er ordet ikke i tabellen. Begge dele vil give et tomt søgeresultat.

Lav mindst 2 rækker mere, og sørg for at dit søgeord ikke er i de to nye rækker.
Avatar billede sbay Nybegynder
11. juli 2005 - 14:42 #16
Altså... så virker det bare! Takker!
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