Ik heb een database met nieuwsberichten, en had eerder vragen over distinct. Met distinct kon worden voorkomen dat dezelfde nieuwsberichten op de voorpagina zouden verschijnen.

Ik heb besloten om in plaats van achteraf te dwijlen, gewoon het probleem te voorkomen door entries eerst te vergelijken, voordat ze in de database terecht komen. Dan nu mijn vraag :)

Zodra we een post binnen halen, moet deze vergeleken worden met de laatste 50 resultaten. Ik weet niet hoe ik dat precies moet doen. Ik neem aan dat het iets zal moeten doen met foreach... Ik heb nu het volgende, maar dit werkt niet naar behoren.

<?
// $posttitle is de titel van het binnen komende bericht,
// $post_title is de titel van een bericht dat al in de database staat.

$titels = array(); # lege array

$sql = "SELECT post_title FROM db WHERE type='1' ORDER BY timestamp DESC LIMIT 0,50";
$db = MYSQL_QUERY($sql);

$titels = MYSQL_FETCH_ARRAY($db);


foreach ($titels as $titeltje)
{
similar_text($posttitle, $titeltje, $percentage);
if ($percentage > 70) {
echo "$posttitle --- betstaat al!<br>";
}
else{

echo "$posttitle --- insert<br>";

} ?>

Doordat het script niet werkt, worden resultaten nu 2 keer in de database gezet, zonder de gelijken eruit te filteren. Door similar_text te gebruiken, zouden ook berichten met ongeveer dezelfde titel moeten worden uitgesloten van opname. Advies iemand?
Zit er wel wat in $posttitle?
Zet dit bovenin.
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);

// rest van je script
?>
Ja, de titel van het inkomende bericht is $posttitle... Die wordt ge-echo-ed, en zie ik ook terug...

Edit: had error reporting al aanstaan, er zijn geen errors.
Ik heb het script even omgegooid... Heb nu het volgende:

<?
// $post_title = database titels
// $posttitle = nieuwe titel


$sql = "SELECT post_title FROM db WHERE type='1' ORDER BY id DESC LIMIT 0,50";
$db = MYSQL_QUERY($sql);

while ( $arr = mysql_fetch_assoc($db) ) {
$buffer[] = $arr['post_title'];
}

foreach ( $buffer as $pointer => $posttitle ) {
if ( $pointer == 0) { // First post must pass..
$PassedTopics[] = $posttitle;
}
foreach($PassedTopics as $pointer_2 => $passed_value) {
similar_text($passed_value,$posttitle, $percent);
if ( $percent < 70 ) {
$PassedTopics[] = $posttitle;
}
}
}
foreach( $PassedTopics as $pointer => $passed) {
echo "insert";
} ?>

Volgens mij zou hij het nu moeten doen, maarrr... Ik krijg in plaats van een mooie echo te zien, de php pagina als download aangeboden in Firefox... Heeft iemand een flauw idee?
Niet * bumpen *. Bumpen is pas na 24 uur toegestaan. Als je je post wilt wijzigen en/of aanvullen dan kun je de editknop boven de post gebruiken.
Arthur Diependaal schreef op 24.05.2007 23:33
Ik krijg in plaats van een mooie echo te zien, de php pagina als download aangeboden in Firefox... Heeft iemand een flauw idee?

Waarschijnlijk duurt het dan allemaal te lang.
Sorry, het was niet mijn bedoeling te 'bumpen'. Ik heb het aantal resultaten te vergelijken verlaagd naar 5. Nu krijg ik een enorme lijst met "insert" te zien. Dat klopt dus ook niet :s

Reageren