Dubbele artikelen in database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Arthur Diependaal

Arthur Diependaal

07/05/2007 00:22:00
Quote Anchor link
Hoi!

Ik heb een mysql database waar iedere 15 minuten artikelen aan toegevoegd worden. Doordat dit veelal nieuws artikelen van verschillende bronnen zijn, komt het nogal eens voor dat er een dubbel artikel in de database voorkomt. Ik wil graag het artikel dat het laatst aan de database toegevoegd is, met dezelfde titel verwijderen. Dit moet echter weer gelimiteerd worden tot 4 dagen.

Ik heb daar nu een hele knullige query voor. Deze haalt nu 1 dubbele post uit de database per keer dat hij gedraaid wordt. Ik wil graag dat de hele database doorzocht wordt, en de oudste titel blijft staan. Op dit moment draai ik de volgende query: *schaam*

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?


$sql
= "SELECT post_title, id, COUNT(post_title) AS num FROM indexednews GROUP BY post_title HAVING (COUNT(post_title) > 1)";
              
        $db->DbQuery( $sql );
      
      
        if( $db->DbNumRows() > 0 )
        while( $article = $db->DbNextRow() )
            {


$id = $article['id'];


 $sql = "DELETE FROM indexednews WHERE id={$id}";
    $db->DbQuery( $sql );
    if( $db->DbError() )
      echo $db->DbError();
      echo "Double post deleted";
}

?>



Ideeën iemand?
Gewijzigd op 01/01/1970 01:00:00 door Arthur Diependaal
 
PHP hulp

PHP hulp

23/11/2024 22:06:47
 
Frank -

Frank -

08/05/2007 00:12:00
Quote Anchor link
Waarom gebruik je geen UNIQUE? Dan is het onmogelijk om gegevens dubbel op te slaan en dus overbodig/zinloos om niet-bestaande dubbele gegevens te verwijderen.

Een probleem los je op daar waar het ontstaat, opruimen van rotzooi is een lapmiddel en moet je proberen te voorkomen. Er kan in de tussentijd te veel mis gaan.
 
Arthur Diependaal

Arthur Diependaal

09/05/2007 21:38:00
Quote Anchor link
Ik kan geen unique gebruiken in dit geval. Goed... Ik ben er een tijdje mee aan het rotzooien geweest, en ik denk dat ik voor select distinct moet gaan. Ik wil dus achteraf filteren. Probleem is dat ik meerdere velden wil outputten. Heeft iemand ervaring met select distinct? Kan het volgende:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<? sql = "SELECT DISTINCT title FROM table ORDER BY timestamp DESC LIMIT 0,15"; ?>


De query haalt de timestamp natuurlijk niet op, maar hoe krijg ik het voor elkaar dat distinct alleen voor de titel geldt, en dus de andere velden gewoon op kan halen? Hoop dat het een beetje duidelijk is.
 
Stefan van Iwaarden

Stefan van Iwaarden

09/05/2007 21:46:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
 sql = "SELECT DISTINCT(title),rest_van_je_velden FROM table ORDER BY timestamp DESC LIMIT 0,15";
?>


let op, geen shorttags, sommige servers ondersteunen dit niet!

Overigens ben ik het met Frank eens dat dit niet de beste oplossing is, maargoed.
 
Jan Koehoorn

Jan Koehoorn

09/05/2007 21:47:00
Quote Anchor link
Ja, het is dus eigenlijk al te laat, en waarom je geen UNIQUE zou kunnen/mogen gebruiken vertel je er niet bij.

Probeer zoiets (lapmiddel):

select veld1, veld2, veld3
from partners
group by veld1

dan krijg je alleen unieke waarden van veld1.
 
Jan Koehoorn

Jan Koehoorn

09/05/2007 21:50:00
Quote Anchor link
@ Stefan: die zal niet werken. DISTINCT en DISTINCTROW zijn synoniem, dus hij kijkt per rij of die uniek is. In title kunnen dan nog steeds dubbele waarden voorkomen, als de rest van de velden maar verschilt.
 
Arthur Diependaal

Arthur Diependaal

09/05/2007 21:56:00
Quote Anchor link
Ha die Stefan en Jan,

Het is gelukt met distinct... Ik snap dat het niet de meest optimale oplossing is, en we gaan in de toekomst zoeken naar een betere.

Hartstikke bedankt, in iedergval...

Arthur
 
Arthur Diependaal

Arthur Diependaal

09/05/2007 22:03:00
Quote Anchor link
Hoi Jan... Bij mij werkt het volgende gewoon:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<? $sql = "SELECT DISTINCT(title), desc, url, timestamp, site FROM table ORDER BY timestamp DESC LIMIT 0,15";     ?>
 
Frank -

Frank -

10/05/2007 17:22:00
Quote Anchor link
Toch vaag dat UNIQUE niet mogelijk. Met distinct doe je namelijk precies hetzelfde, maar dan op het moment van ophalen van de gegevens. Zorg dat je de juiste constraints gebruikt bij de invoer, dan heb je het lapmiddel DISTINCT helemaal niet nodig.

In PostgreSQL kun je overigens veel uitgebreidere constraints aanmaken dan in MySQL. check is je beste vriend, zeker in combinatie met een stored procedure.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.