Avatar billede chatonline Nybegynder
01. juni 2004 - 18:29 Der er 6 kommentarer og
1 løsning

Simpel søg

Hej,
jeg søger et script der kan søge i tråde i mit forum.
Alle trådene ligger i to tabellen: forum_reply
Felter i forum_replay:
id  reply_to  text  bruger  brugerId  ip  board  emneId  date_stamp  public  last_edit_stamp

Anden tabel: forum_thread
Felter i denne:
id  overskrift  text  mail  bruger  brugerId  ip  board  emneId  last_reply_stamp  public  lock  date_stamp  last_edit_stamp


Når man ønsker at søge skal der bare være et tekstfelt og en knap, ik andet. Når søgningen udføres, skal den komme med resultaer på en ny side.
På siden skal den skrive trådenes overskrift og hvem den er lavet af og sidste bruger der har skrevet i den. Plus hvor mange indlæg der er lavet i tråden.

Nogen der kan hjælpe?
Avatar billede alvion Nybegynder
01. juni 2004 - 20:58 #1
Der findes en nem metode (der performer dårligt ved mange threads) og en svær metode (der til gengæld altid performer godt.

Den nemme (der laver jeg et script):

$query = $_GET["query"];
$result_list = array();

// Hent først alle id'er på threads, hvor svarene indeholder den søgte tekst
$sql = "select distinct reply_to from forum_reply where text like '%$query%' ";
$res = mysql_query($sql) or die(mysql_error());
while ($row = mysql_fetch_array($res))
  $result_list[] = $row["reply_to"];

// Hent alle threads, fra forgående søgning + dem hvor
// thread teksten indeholder den søgte tekst
$sql = "select * from forum_thread ";
$sql .= "where text like '%query%' ";
if (count($result_list) > 0)
    $sql .= "or id in (" . join(",", $result_list) . ") ";
$res = mysql_query($sql) or die(mysql_error());
while ($row = mysql_fetch_array($res)) {
    // Her printer du alle links til trådene
}



Den svære vil jeg ikke lave - men jeg vil gerne hjælpe DIG med at lave den :-)

Den går ud på at lave en tabel med alle ord fra tråde + svar. Derudover en tabel, der linker ord og forum_thread sammen.

Så laver du et script, der skal køre periodisk. Dette script løber alle nye tråde + svar igennem, splitter tekstfelterne i ord, og gemmer disse ord i ord-tabellen. Samt gemmer linket imellem ordene og forum_thread.

Din søgning foregår nu således:
1) Søg i ord tabellen.
2) Søg i ord_thread tabellen (ud fra fundne ord). Udtræk en unik liste af forum_thread id'er.
3) Udtræk alle forum_thread's baseret på id-listen fra 2)
Avatar billede chatonline Nybegynder
01. juni 2004 - 21:21 #2
Okay, mange tak, prøver at se lidt på det.
Avatar billede muddi Praktikant
01. juni 2004 - 22:33 #3
Du kan også lavet et FULLTEXT index på de felter du vil søge i. Du kan så i dit SELECT-statement bruge MATCH()... AGAINST()...
Læs mere på http://dev.mysql.com/doc/mysql/en/Fulltext_Search.html

Jeg antager her, at du bruger MySQL!
Avatar billede chatonline Nybegynder
03. juni 2004 - 22:49 #4
Nogen der gider kontakte mig på e-mail: Jeff@skyskraber.dk så kan vi evt. klare det pr. betaling.
Avatar billede chatonline Nybegynder
07. juni 2004 - 00:47 #5
Nogen jeg så kan kontakte?
Avatar billede chatonline Nybegynder
05. juli 2004 - 23:15 #6
alvion -> Gider du kontakte mig på Jeff@skyskraber.dk
Avatar billede alvion Nybegynder
06. juli 2004 - 12:06 #7
muddi -> Ideen med fulltext index har samme problem som mit første eksempel: Der skal laves to søgninger, først i svar-tabellen, dernæst i spørgsmål-tabellen.

chatonline -> Jeg skriver til dig om lidt.
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