Avatar billede sebast Nybegynder
14. september 2005 - 13:00 Der er 14 kommentarer og
1 løsning

Søg i databasen

Hvordan kan jeg søge mere brugbart i min database?

Hvis nu mit felt indeholder: "Ja, der findes virkelig maaaaaaaaange aber", og jeg søger på "findes der aber?". Hvordan får jeg den så til at vise mit felt?
Avatar billede dmdisco Nybegynder
14. september 2005 - 13:30 #1
fulltext search ellers kan du lave et array med stop ord såsom "der, den, det osv"
og så fjerne dem fra søge strengen og bruge en normal LIKE i mysql databasen
Avatar billede sebast Nybegynder
14. september 2005 - 13:33 #2
hvordan skulle det gøres?

forresten - hvordna kan jeg lave et laangt mysql-kald med en masse "or titel like '%bla%' ...." med regexp?

er det ikke noget alá:

where `titel` like '[findes].*[der].*[blabla]'?
Avatar billede jaw Nybegynder
14. september 2005 - 13:37 #3
WHERE `titel` REGEXP ([findes].*[der].*[blabla])
Avatar billede jaw Nybegynder
14. september 2005 - 13:41 #4
Altså f.eks. (meget bredt og simpelt):

$str = "abe";
REGEXP'findes(.*)der(.*)".$str."(.*)'
Avatar billede sebast Nybegynder
14. september 2005 - 14:07 #5
hvordan får jeg brugt det her:

print_r(preg_split("/[\s,]+/", "her kommer teksten fra mit input"));

--
den udskriver alle ordene i et array, og de værdier skal jeg smide ind i mit sql-kald.

altså

where blabla like = 'array[0]'
or blabal like = 'array[1]'
...
Avatar billede sebast Nybegynder
14. september 2005 - 14:48 #6
$keyword = preg_split("/[\s,]+/", "her kommer min tekst fra mit input");

for ($i = 1; $i <= count($keyword); $i++)
{
    echo "or `titel` like '%" . $keyword[$i] . "%'";
}

--
hvordan får jeg det sat ind i mit sql-kald? :)
Avatar billede jaw Nybegynder
14. september 2005 - 15:21 #7
$where = "";
for ($i = 1; $i <= count($keyword); $i++)
{
    $where .= "or `titel` like '%" . $keyword[$i] . "%'";
}
SELECT * FROM tabel WHERE $where

(Der vil være en fejl i din $where, men der har du princippet for at få dataene ind i dit kald)
Avatar billede sebast Nybegynder
14. september 2005 - 16:07 #8
Nu giver den mig et output ligemeget hvad? :S :S Den ser således ud:

--
$tekst = "";

$keyword = preg_split("/[\s,]+/", addslashes($tekst));

$where = "";
for ($i = 1; $i <= count($keyword); $i++)
{
    $where .= " or `titel` like '%" . $keyword[$i] . "%'";
}


$query = mysql_query("select `tekst` from `faq` where `titel` like '%steven%'" . $where) or die (mysql_error());
Avatar billede jaw Nybegynder
14. september 2005 - 16:09 #9
Den finder jo bare strenge der indeholder '%steven%' eller '%et-af-dine-keyord%'.
Avatar billede sebast Nybegynder
14. september 2005 - 16:19 #10
ja, og der er jo ingen keywords, da $tekst er tom.

Så den burde jo intet finde.
Avatar billede jaw Nybegynder
14. september 2005 - 16:23 #11
Jo, for du gennemløber din for-løkke 1 gang (udskrev count($keywords) og se selv). Derfor får du:
or titel like '%%'
...hvilket vil returnere alt fra tabellen. Du kan evt. sætte $i til 2 som startværdi (der er sikkert også andre og bedre løsninger).
Avatar billede sebast Nybegynder
14. september 2005 - 16:27 #12
Hvorfor giver echo count($keyword), 1?
Avatar billede jaw Nybegynder
14. september 2005 - 16:29 #13
Tjah, tror at den opfatter en streng på 0 tegn som stadigt værende en streng.
Avatar billede sebast Nybegynder
07. oktober 2005 - 11:23 #14
smid svar.
Avatar billede jaw Nybegynder
07. oktober 2005 - 21:42 #15
Gerne.
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