Ta bort dubletter
Jag har märkte för några dagar sen att min algoritm för att spara ny nyhetsrubriker inte va den bästa. Det var en hel del dubletter som lades in. Jag måste ha programmerat mitt i natt för att ha missat det. Men i alla fall idag tänkte jag att jag skulle ta bort dubletterna men kom inte på nåt bra sätt. Jag vet att det går med sub quires i mysql 5.0 men min mysql version är nåt på 4. så jag vart tvungen att göra det med php. Jag kom fram till följande:
Vi kan säga att tabellen som rubrikerna sparas i heter news_link med fälten link_id, link_url bla. Jag har skapat två st db-kopplingar via mitt object som jag kallar för
/*Skapa en koppling för att ta ut rader -
Database är en klass som tillhandahåller
mysql funktionalitet.*/
$db = new Database();
//Skapa en koppling för att ta bort rader
$db2 = new Database();
/*Gruppera efter räkna link_url och
gruppera ta även ut link_url
På det sättet får jag ut hur många
gånger en viss link_url finns lagrad*/
$sql=”SELECT count(link_url), link_url”;
$sql.=”FROM news_link group by link_url”;
$db->query();
while($row = $db->getRow()){
…/*Vi ska bara ta bort rader om de
…förekommer på flera ställen*/
…if($row[”count(link_url)”]>1){
……/*Ta bort rader som innehåller link_url
……men ta bort en mindre än som fanns*/
……$sql=”delete from news_link where “;
……$sql.=”link_url=’”.$row[”link_url”].”‘ “;
……$sql.=”limit “.($row[”count(link_url)”]-1);
……$db2->query($sql);
…}
}
Nu kanske ni undrar varför jag inte bara gjorde fältet link_url till unik så skulle detta problem inte uppstå. Jag undrar faktiskt samma sak. Det har jag i alla fall gjort nu när alla link_url är unika dvs alla rubrik urlar är unika.
Posta gärna en annan lösning.