Hoe kan het dat een record 2x wordt weergegeven terwijl het er maar één keer inzit?
Ik denk niet dat het aan mijn code ligt daar er 1250 rijen in mijn database zitten en meestal loopt het goed. Maar soms loopt het eens fout, zoals nu weer. Is dit een bug? ligt dit aan een kapotte database? Kent iemand het fenomeen?
Het gedicht "wel of niet" wordt 2x weergegeven onder hetzelfde id, id is auto increment dus mocht het al dubbelpost zijn dan zou het id één hoger moeten zijn...
Dit lijkt me eerder een bug, glitch in mijn database (tekenen van corruptie?) dan dat het volgens mij aan mijn code ligt. Daarom dat ik momenteel denk dat code tonen zinloos is...
Zeker omdat het bij al de andere gedichten WEL goed loopt (heb het fenomeen wel al eens eerder gezien.. heb het dan opgelost door het record maar te verwijderen...)
SELECT gedichten.id,
gedichten.titel,
gedichten.auteur,
DATE_FORMAT(gedichten.datum, '%d-%m-%Y') AS datum,
gedichten.category,
gedichten.gedicht,
ratings.rating,
ratings.aantal_stemmen FROM gedichten
LEFT JOIN ratings ON gedichten.id = ratings.gedicht_id WHERE category=1 ORDER BY id DESC LIMIT 0,7
en ik haal het op met de volgende functie
function fetch_data($fields="*", $order="")
{
$res = mysql_query("SELECT ".$fields." ".$this->condition." ".$order." LIMIT ".$this->offset.",".$this->mpp) or die (mysql_error);
while($row = mysql_fetch_assoc($res))
{
$data[] = $row;
}
return $data;
}
Als ik daar een print_r van de data doe dan zie ik reeds dat hij het al 2x meestuurt, dus hoe ik het dan later weergeef is niet relevant. Onthou ook dat het maar heel soms gebeurd, heb het nu 2x zien gebeuren, meestal loopt het goed...
Hmm ik heb het opgelost, in mijn ratings tabel stond gedicht_id 1280 twee maal. Dit zou eigenlijk niet mogen... maar dit is heel andere code dan het bovenstaande.
Er moet soms iets fout gaan bij het invoegen van scores. Als gedicht_id 2x wordt ingevoegd (het zou niet mogen en gebeurd ook bijna nooit...) dan komt het gedicht er dus 2x op...
function query_indiennodig_toevoegen($query_string)
{
global $gedicht_id;
$query=mysql_query($query_string) or die ("Selecteren mislukt " .mysql_error());
if (mysql_num_rows($query) == 0)
{
$sql = "INSERT INTO ratings (id, gedicht_id, aantal_stemmen, waarde_stemmen) VALUES ('', '$gedicht_id', '0', '0') ";
$result = mysql_query($sql) or die ("lege velden inserten mislukt " .mysql_error());
}
$data = mysql_fetch_assoc(mysql_query($query_string));
return $data;
}
En een voorbeeld van een query is
"SELECT * FROM ratings WHERE gedicht_id='$gedicht_id'"
Toch moet het hier soms dus wel eens fout gaan, dat hij toch 2x een nieuw veld invoegt...
Bovenstaande functie dient om te checken of er een record is in mijn ratings tabel over een bepaald gedicht_id, als dit NIET zo is dan moet hij het toevoegen, met lege waarden. Zodat het hierna kan geupdate worden met waardes...
Hoe kan ik ervoor zorgen dat het hier echt maar 1x kan?