Hej!
Har inte lyckats klura ut hur jag ska lösa detta;
jag har ett litet community. Har precis gjort så att användarna kan se de 10 senaste besökarna på sitt Krypin, se kod.
<p><br><h2>DITT KRYPINS<br>10 SENASTE BESÖK</h2>
<?
$result = mysql_query("SELECT * FROM visits WHERE owner = '$ego_username' ORDER BY datum DESC LIMIT 10");
$antal = mysql_num_rows($result);
if($antal < 1)
print("<p><b>Du har inte haft några besök!</b><br>\n");
else
{
print("<table border=\"0\" cellspacing=\"0\" cellpadding=\"3\">");
print("<tr bgcolor=\"#8FA3B5\"><td><b>NAMN</b></td>\n<td><b>BESÖKSDATUM</b></td>\n</tr>\n");
while($visitor = mysql_fetch_array($result))
{
$vname = $visitor["name"];
$vuser = $visitor["visitor"];
$vdatum = $visitor["datum"];
$vdatum = date("Y-m-d H:i", $vdatum);
print("<tr>\n<td><a href=\"?visainfo&person=$vuser\">$vname</a></td>\n<td>$vdatum</td>\n</tr>\n");
}
print("</table>");
}
?>
När någon besöker ditt Krypin lagras det i tabellen visits. Viktiga fälten i den är owner (Krypinets ägare), visitor (den som är inne och kollar) samt datum (tidpunkt för besöket). Alla olika besök mellan användarna lagras alltså i denna tabell.
Problemet är att nu lagras samtliga besök som gjorts i användarnas Krypin. Jag vill att bara de 10 senaste (för varje krypin) ska finnas, resten ska raderas. (eftersom det ändå bara är de 10 senaste som visas). Annars kommer tabellen att växa till oändligt stor!
Förutom detta fungerar koden klockrent.
Någon som vet hur jag ska gå tillväga?
MVH
.::j::.
lunne82Medlem sedan dec. 2003153 inlägg Börja med att göra om din while-loop såhär:
while($visitor = mysql_fetch_array($result))
{
$vname = $visitor["name"];
$vuser = $visitor["visitor"];
$vdatum = $visitor["datum"];
$f_vdatum = date("Y-m-d H:i", $vdatum);
$str = "<tr>\n".
"<td><a href=\"?visainfo&person=$vuser\">$vname</a></td>\n".
"<td>$f_vdatum</td>\n".
"</tr>\n";
print($str);
}
Sen lägger du in detta efter print("</table>");
if ($antal > 10) {
// Körs bara om det behövs
mysql_query("DELETE FROM visits WHERE owner='$ego_username' AND datum<'$vdatum'");
}
Efter din loop kommer $vdatum innehålla det äldsta besöket av de 10 som ska visas, alltså kan du ta bort de som är äldre och som har samma ägare.
Hej!
Jag tror att du missförstod mig lite! men jag löste problemet så här: (tack ändå!)
$result = mysql_query("SELECT * FROM visits WHERE owner = '$ego_username' ORDER BY datum DESC");
$antal = mysql_num_rows($result);
if($antal < 1)
print("<p><b>Du har inte haft några besök</b><br>\n");
else
{
print("<table border=\"0\" cellspacing=\"0\" cellpadding=\"3\">");
print("<tr bgcolor=\"#8FA3B5\"><td><b>NAMN</b></td>\n<td><b>BESÖKSDATUM</b></td>\n</tr>\n");
$counter = 0;
while($visitor = mysql_fetch_array($result))
{
$vname = $visitor["name"];
$vuser = $visitor["visitor"];
$besokid = $visitor["id"];
$vdatum = $visitor["datum"];
$vdatum = date("Y-m-d H:i", $vdatum);
$counter++;
if($counter > 10)
mysql_query("DELETE FROM visits WHERE id = '$besokid'");
else
print("<tr>\n<td><a href=\"?visainfo&person=$vuser\">$vname</a></td>\n<td>$vdatum</td>\n</tr>\n");
}
print("</table>");
.::j::.
lunne82Medlem sedan dec. 2003153 inlägg
Jag tror att du missförstod mig lite!
Nej, jag tror inte det eftersom mitt script gör samma sak, men inte riktigt på samma sätt. Visst funkar det bra det du gjorde också, men jag tror det är mer optimerat att göra som jag gjorde. Då kommer du nämligen bort från att köra mysql_query() en gång för varje "besök" som inte ska vara med.
OK, du får ursäkta mig! Jag tittade inte tillräckligt noga på din kod första gången, utan såg bara att du inte hade med någon räknare som bryter vid 10 inlägg i while-loopen (ska bara skriva ut 10 st!), och antog då att du inte riktigt var med på vart jag ville komma.
$antal kommer ju heller aldrig att överstiga 10 eftersom jag i första inlägget även skrev
$result = mysql_query("SELECT * FROM visits WHERE owner = '$ego_username' ORDER BY datum DESC LIMIT 10");
$antal = mysql_num_rows($result);
eller hur?
Därför gjorde jag en "mix" av din optimerade lösning och min nya lösning.
$result = mysql_query("SELECT * FROM visits WHERE owner = '$ego_username' ORDER BY datum DESC");
$antal = mysql_num_rows($result);
if($antal < 1)
print("<p><b>Du har inte haft några besök</b><br>\n");
else
{
print("<table border=\"0\" cellspacing=\"0\" cellpadding=\"3\">");
print("<tr bgcolor=\"#8FA3B5\"><td><b>NAMN</b></td>\n<td><b>BESÖKSDATUM</b></td>\n</tr>\n");
$counter = 0;
while(($visitor = mysql_fetch_array($result)) && ($counter < 10))
{
$vname = $visitor["name"];
$vuser = $visitor["visitor"];
$vdatum = $visitor["datum"];
$f_vdatum = date("Y-m-d H:i", $vdatum);
$counter++;
print("<tr>\n<td><a href=\"?visainfo&person=$vuser\">$vname</a></td>\n<td>$f_vdatum</td>\n</tr>\n");
}
print("</table>");
if ($antal > 10)
mysql_query("DELETE FROM visits WHERE owner = '$ego_username' AND datum < '$vdatum'");
Verkar som att detta fungerar bra!
Tack så mycket för hjälpen!
.::J::.