WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   PHP + MySQL sökning (https://www.wn.se/forum/showthread.php?t=19689)

Timofey 2007-02-28 22:48

Jag leter efter ett sätt att söka i en MySQL databas.

Jag vill att sökningen endast ska ske i vissa celler i databasen, som jag kan välja ut med "SELECT ...". Dessa celler innehåller text (ofta mycket text i HTML-format).
Vad jag vill är att min sökfunktion ska hitta vissa ord i dessa texter.

Känner någon till hur detta ska göras eller några färdiga skript?
Det är alltså php jag kodar i.

Lundmark 2007-02-28 23:10

kolla på Full-Text Search

Timofey 2007-02-28 23:54

Det funkade med "select * from table where text like \"%$query%\"
order by text";

Timofey 2007-03-01 00:03

Detta skript fungerade bra efter några mindre ändringar.

fors 2007-03-01 10:17

Citat:

Originally posted by alltinggratis@Mar 1 2007, 00:54
Det funkade med select * from table where text like %query%
order by text;

Du bör inte söka med %text%. Det är inte bra rent prestandamässigt då all text i kolumnen måste gås igenom. Använd, som Lundmark sa, Full-Text Search till sökning - som man skall göra.

Sigurd 2007-03-01 10:39

Vad säger ni om MATCH i MySQL? Är det den optimala vägen att gå vid sökning?

Eddie 2007-03-01 10:52

Jag har gjort några direkta tester eller liknande men på större fält så tycker jag Match generellt brukar fungera snabbare än att anvädna Where .. Like och går ju dessutom att få fram relevans så att man kan sortera lite snyggare.

fors 2007-03-02 11:05

Citat:

Originally posted by Sigurd@Mar 1 2007, 11:39
Vad säger ni om MATCH i MySQL? Är det den optimala vägen att gå vid sökning?

Match används ju vid Full-text search. En vanlig WHERE-sats kan man ju använda om man vill leta fram något specifikt värde i en kolumn. Ett exempel är om man letar efter en specifik användare så skall man ju använda WHERE. Däremot om man söker i en text skall man använda Full-text search.

Timofey 2007-03-02 16:18

Jag tyckte att "where ... like" fungerade väldigt bra för att söka efter en text-bit i mindre kolumner i tabellen (som inte innehåller så mycket text). Har inte testat med större texter (typ fyllda A4).
Dock stötte jag på det problemet att man får nästan alla "celler" som träffar om man söker på en bokstav. Kanske finns någon lösning för att begränsa sökfrasen till minst 3 tecken, annars visas "inga resultat"?

fors 2007-03-02 17:30

Citat:

Originally posted by alltinggratis@Mar 2 2007, 17:18
Jag tyckte att where ... like fungerade väldigt bra för att söka efter en text-bit i mindre kolumner i tabellen (som inte innehåller så mycket text). Har inte testat med större texter (typ fyllda A4).
Dock stötte jag på det problemet att man får nästan alla celler som träffar om man söker på en bokstav. Kanske finns någon lösning för att begränsa sökfrasen till minst 3 tecken, annars visas inga resultat?

Om du vill begränsa sökfrasen till minst tre tecken och samtidigt vill använda LIKE gör du det enklast med hjälp av php-kod. Full-text search använder en variabel till att sätta minsta längden på ett ord, vanligtvis 3 eller 4.

kers 2007-03-02 18:36

När tråden ändå är vid liv så vill jag passa på och höra om någon har en bra lista med svenska stoppord?

Timofey 2007-03-02 20:12

Citat:

Originally posted by fors@Mar 2 2007, 18:30
Om du vill begränsa sökfrasen till minst tre tecken och samtidigt vill använda LIKE gör du det enklast med hjälp av php-kod.
Eftersom jag nyss har börjat med php-programmering så kan jag passa på att fråga: hur?
Låt oss säga att jag var en variabel som är sökfrasen - $q Hur kontrollerar jag att den är minst 3 tecken lång?

WizKid 2007-03-02 20:22

kers: Denna använder jag: http://www.unine.ch/info/clef/swedishST.txt . Kommer inte ihåg vad jag hittade den.

Timofey 2007-03-02 20:24

Citat:

Originally posted by kers@Mar 2 2007, 19:36
När tråden ändå är vid liv så vill jag passa på och höra om någon har en bra lista med svenska stoppord?

Vad är definitionen på "stoppord"? Förstår inte riktigt vitsen med listan.

kers 2007-03-02 20:42

Citat:

Ursprungligen postat av WizKid
kers: Denna använder jag: http://www.unine.ch/info/clef/swedishST.txt . Kommer inte ihåg vad jag hittade den.


Tusen tack!

Citat:

Ursprungligen postat av alltinggratis
Vad är definitionen på stoppord? Förstår inte riktigt vitsen med listan.

Det är ord som är så pass vanliga att de inte är lönt att använda vid en sökning - men rensar helt enkelt bort dem från söksträngen.

fors 2007-03-02 22:10

Citat:

Ursprungligen postat av alltinggratis
Citat:

Ursprungligen postat av fors
Om du vill begränsa sökfrasen till minst tre tecken och samtidigt vill använda LIKE gör du det enklast med hjälp av php-kod.

Eftersom jag nyss har börjat med php-programmering så kan jag passa på att fråga: hur?
Låt oss säga att jag var en variabel som är sökfrasen - q Hur kontrollerar jag att den är minst 3 tecken lång?

strlen(trim($q)) retunerar antalet tecken i strängen $q
Exempelvis:
Kod:

$q = trim($q);
if(strlen$q) < 3) {
  die("minst 3 tecken");
}
/** här använder vi $q */

Förklaring av funktionerna:
trim - tar bort blanka tecken i början och slutet av strängen
strlen - beräknar antalet tecken i en sträng

Ett tips är att kolla upp funktioner i manualen (php.net).

Timofey 2007-03-02 23:57

Tackar!

Timofey 2007-03-03 15:51

Bara ett litet fel jag upptäckte: det ska vara
Kod:

if(strlen($q) < 3) {
istället för
Kod:

if(strlen$q) < 3) {

Jine 2007-03-03 19:20

Citat:

Ursprungligen postat av alltinggratis
Citat:

Ursprungligen postat av fors
Om du vill begränsa sökfrasen till minst tre tecken och samtidigt vill använda LIKE gör du det enklast med hjälp av php-kod.

Eftersom jag nyss har börjat med php-programmering så kan jag passa på att fråga: hur?
Låt oss säga att jag var en variabel som är sökfrasen - $q Hur kontrollerar jag att den är minst 3 tecken lång?

echo strlen('dinsoekfras');

Kommer att retunera "11".

Bara köra en IF stats och kolla om värdet > 11 annars skicka tillbaka med felmeddelande. :)


Alla tider är GMT +2. Klockan är nu 18:17.

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