Avatar billede rthuls Nybegynder
27. oktober 2004 - 09:54 Der er 11 kommentarer og
1 løsning

relaterede nyheder

Jeg har tidligere fået hjælp til at lave en relaterede nyheder funktion: http://www.eksperten.dk/spm/552845

Ideen er at hver post får tildelt nogle keywords. Hvis to posts indeholder de samme keywords er de relaterede.
Problemet er at når man er inde under en post, vises denne post også til at være relateret til sig selv.


Min kode ser sådan her ud ($pid er id'et fra den post man er inde under):

$s = "";
$emneord = "";
$sqlwhere = "";
$emneord = explode(", ", $n['keywords']);
foreach($emneord as $ord){
    $sqlwhere .= "overskrift LIKE '%" . $ord . "%' OR ";
}
$sqlwhere = substr($sqlwhere, 0, -4);
$DB = new MySQL();
$DB->Query("SELECT post_id, overskrift FROM posts WHERE " . $sqlwhere . "AND post_id != " . $pid . "");
while($n = $DB->FetchArray()){
    $s .= $n['overskrift'];
}
Avatar billede bojo Nybegynder
27. oktober 2004 - 10:02 #1
og post_id ikke er mig selv
Avatar billede rthuls Nybegynder
27. oktober 2004 - 10:09 #2
men det er vel også det jeg har her:
AND post_id != " . $pid . ""
?
Avatar billede bojo Nybegynder
27. oktober 2004 - 10:12 #3
ups - ja hvis $pid er egen post_id hvad det jo ikke tyder på. Mangler der ikke også et " " før AND, måske derfor
Avatar billede jensenxp Novice
27. oktober 2004 - 10:16 #4
$sqlwhere slutter på en måske "ikke blank" og derefter appendes AND

hvis $sqlwhere = "LIKE %bla%" står der

"SELECT post_id, overskrift FROM posts WHERE oversskrift LIKE %bla%AND post_id != " . $pid . ""
Avatar billede rthuls Nybegynder
27. oktober 2004 - 10:22 #5
Jeg tror jeg lavede en typo, da jeg oprettede spørgsmålet. Sql'en ser sådan her ud:
SELECT post_id,overskrift FROM posts WHERE $sqlwhere AND post_id != $pid ORDER BY tid DESC

Det er vel godt nok, eller?
Avatar billede bojo Nybegynder
27. oktober 2004 - 10:31 #6
hmmm - det burde det jo, er du 100% sikker på $pid. Prøv at sammenlign $pid med de post_id du modtager
Avatar billede rthuls Nybegynder
27. oktober 2004 - 10:36 #7
Hvis jeg prøver med:
while($n = $DB->FetchArray()){
    echo $pid . " - " . $n['post_id'] . "<br>";
}

Outputter den:
1 - 1
1 - 2
1 - 4

Jeg fatter det simpelthen ikke
Avatar billede bojo Nybegynder
27. oktober 2004 - 10:46 #8
og $pid er "pakket" rigtigt ind i din sql ?

prøv at put dit sql statement ind i en string og udskriv så den for at se om det er rigtigt.
Avatar billede rthuls Nybegynder
27. oktober 2004 - 10:50 #9
Ser f.eks sådan her ud:

SELECT post_id,overskrift FROM posts WHERE overskrift LIKE '%macromedia%' OR overskrift LIKE '%flash%' OR overskrift LIKE '%mx 2004%' AND post_id != 1 ORDER BY tid DESC
Avatar billede coderdk Praktikant
27. oktober 2004 - 10:55 #10
Mangler ()'er ;)

$DB->Query("SELECT post_id, overskrift FROM posts WHERE (" . $sqlwhere . ") AND post_id != " . $pid . "");
Avatar billede bojo Nybegynder
27. oktober 2004 - 11:01 #11
arrrrghh :-)
Avatar billede rthuls Nybegynder
27. oktober 2004 - 11:12 #12
Yes, der var den sgu :o)

Tak for hjælpen allesammen!
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