Seite 1 von 2

Summieren

Verfasst: Fr 23.Feb, 2007 14:07
von Holger
Hallo,

ich habe eine Click-Counter eingebaut und möchte nun die Summe der Clicks anzeigen.
Die DB-Tabelle heisst ClickTable, die Link-IDs werden im Feld click_id gespeichert und die Anzahl der Clicks wird in click_count gespeichert.

Wie könnte ich nun eine Summe bilden?

So??????????

Code: Alles auswählen

$clicktotal='0';
$result = mysql_query("SELECT * FROM ClickTable");
  while ($r = mysql_fetch_array($result))
  {
    $clicktotal = $clicktotal + $r['click_count']
  }
    echo($clicktotal);
/Holger

Verfasst: Fr 23.Feb, 2007 17:19
von oxpus

Code: Alles auswählen

SELECT sum(click_count) as Clicks from ClickTable;
würde da reichen.
"Clicks" käme dann zurück und enthielte die Anzahl Datensätze, hier also die Anzahl der Klicks.

Deine Variante wäre zwar auch korrekt, ist aber langsamer (auch wenn man das bei kleineren Tabellen/Datenbanken kaum merken sollte), da die Berechnung von PHP, also dem Server und nicht bereits in der ohnehin hierfür schnelleren Datenbank durchgeführt würde...

Verfasst: Sa 24.Feb, 2007 20:15
von Holger
Danke!

Verfasst: Do 08.Mär, 2007 09:59
von Holger
Andere, erweiterte Frage: wie bekomme ich auf gleicher Weise die Summe der Posts in einem Forum raus?
Habe schon versucht die Funktion für die Board-Statistiken ausfindig zu machen, habe aber nichts gefunden.

Verfasst: Do 08.Mär, 2007 10:22
von oxpus
Das ist im phpBB bereits vorhanden:

Code: Alles auswählen

$total_posts = get_db_stat('postcount');
$total_users = get_db_stat('usercount');
$newest_userdata = get_db_stat('newestuser');
$newest_user = $newest_userdata['username'];
$newest_uid = $newest_userdata['user_id'];
Zu finden in der index.php (vanilla phpBB) und spricht wohl für sich ;)

Verfasst: Do 08.Mär, 2007 10:24
von Holger
Japp, das habe ich gefunden, ich möchte dies aber von "aussen" abrufen, also nicht aus phpBB heraus!

Verfasst: Do 08.Mär, 2007 10:25
von oxpus
Dann eine Abfrage:

Code: Alles auswählen

SELECT count(post_id) as total_posts FROM phpbb_posts;
;)

Verfasst: Do 08.Mär, 2007 10:26
von Holger
Total wäre das dann

Code: Alles auswählen

$summe = SELECT count(post_id) as total_posts FROM phpbb_posts;
?

Verfasst: Do 08.Mär, 2007 10:27
von oxpus
Nein, die Summe wäre dann schon in total_posts enthalten!
Die Abfrage ist dann in ein PHP-Script erst einzubauen.

Das Original findest Du in der includes/functions.php.

Verfasst: Do 08.Mär, 2007 14:26
von Holger
In der functions.php finde ich nichts, was mit total_posts zu tun hat.

Naja, ich habe in meinem Script nun

Code: Alles auswählen

$result3 = mysql_query('SELECT count(post_id) as total_posts FROM '.$row[name].'_phpbb_posts');
Kann ich das mit

Code: Alles auswählen

	<td class="row2">'.$total_posts.'</td>
dann wieder ausgeben?

/Holger

Verfasst: Do 08.Mär, 2007 15:17
von oxpus
Wenn Du $total_posts auch füllst, ja ;)

Dann sähe die Abfrage (ohne phpBB) auch so aus:

Code: Alles auswählen

$sql = "'SELECT count(post_id) as total_posts FROM ".$row[name]."_phpbb_posts";
$result = mysql_query($sql);
if ($result)
{
$row = mysql_fetch_array($result);
mysql_freeresult($result);
$total_posts = $row['total_posts'];
}
else
{
die('Could not fetch total posts');
}
Tippselfehler eingeschlossen ;)

Verfasst: Fr 09.Mär, 2007 10:05
von Holger
[quote="oxpus";p="70345"]

Code: Alles auswählen

SELECT sum(click_count) as Clicks from ClickTable;
würde da reichen.
"Clicks" käme dann zurück und enthielte die Anzahl Datensätze, hier also die Anzahl der Klicks.

Deine Variante wäre zwar auch korrekt, ist aber langsamer (auch wenn man das bei kleineren Tabellen/Datenbanken kaum merken sollte), da die Berechnung von PHP, also dem Server und nicht bereits in der ohnehin hierfür schnelleren Datenbank durchgeführt würde...[/quote]
Sorry, ich darauf nochmal zurückkommen. Wie bekomme ich die Clicks angezeigt?
Das hier kann ja nicht korrekt sein:

Code: Alles auswählen

$result = mysql_query("SELECT sum(click_count) as Clicks from ClickTable;");
    echo('<span class="postbody">');
    echo($Clicks);
    echo('</span>');

Verfasst: Fr 09.Mär, 2007 10:35
von oxpus
Ich hab in meinem letzten Post doch schon den kompletten Code gepostet ;)

Verfasst: Fr 09.Mär, 2007 11:11
von Holger
Klappt! Danke!

Verfasst: Di 24.Apr, 2007 13:57
von Holger
[quote="oxpus";p="70918"]Wenn Du $total_posts auch füllst, ja ;)

Dann sähe die Abfrage (ohne phpBB) auch so aus:

Code: Alles auswählen

$sql = "'SELECT count(post_id) as total_posts FROM ".$row[name]."_phpbb_posts";
$result = mysql_query($sql);
if ($result)
{
$row = mysql_fetch_array($result);
mysql_freeresult($result);
$total_posts = $row['total_posts'];
}
else
{
die('Could not fetch total posts');
}
Tippselfehler eingeschlossen ;)[/quote]
oxpus,

ich muss leider nochmal auf das hier zurück kommen.
Leider bekomme ich nur "Could not fetch total posts" angezeigt.
Das ganze Teil sieht so aus:

Code: Alles auswählen

if($_REQUEST['action'] == 'list')
{

$result = mysql_query('select * from phpbb_forums');
while($row = mysql_fetch_assoc($result))
{


$sql3 = "SELECT count(post_id) as total_posts FROM ".$row[name]."_phpbb_posts"; 
$result3 = mysql_query($sql); 
if ($result3) 
{ 
$row3 = mysql_fetch_array($result3); 
mysql_freeresult($result3); 
$total_posts = $row3['total_posts']; 
} 
else 
{ 
die('Could not fetch total posts'); 
}


	$result2 = mysql_fetch_assoc(mysql_query('select * from '.$row[name].'_phpbb_config where config_name="sitename"'));
	$fname = $result2['config_value'];
	$flrow .= '
	<tr>
	<td class="row1" nowrap="nowrap">'.$row[name].'</td>
	<td class="row2">'.$fname.'</td>
	<td class="row1"><b><a href="'.$row[name].'/" target="_parent">Click Here</a></b></td>
	<td class="row2"><b>'.$total_posts.'</b></td>
  </tr>';
}
if(!$flrow)
{
	$flrow = '<td class="row1" nowrap="nowrap" colspan="3">No forums!</td>';
}
amfr_header();
print '
<h1>Admin</h1>

<h1>Forums List</h1>

<table width="100%" cellpadding="4" cellspacing="1" border="0" class="forumline">
  <tr>
	<th nowrap="nowrap" height="25" class="thCornerL">Access Name</th>
	<th height="25" class="thTop">Forum Name</th>
	<th height="25" class="thTop">View Forum</th>
	<th height="25" class="thTop">Number of posts</th>
  </tr>
'.$flrow.'
</table>';
amfr_footer();
exit;
}
Ich habe da definitiv sql3 an die falsche Stelle gesetzt.
Oder?

Gruss
Holger

Verfasst: Di 24.Apr, 2007 16:41
von oxpus
Zeile 10:

Code: Alles auswählen

$result3 = mysql_query($sql);
Da muss zumindest $sql3 rein.

Ansonsten kann ich so beim schnellen Durchblick nichts weiteres falsches erkennen...

Verfasst: Mi 25.Apr, 2007 11:15
von Holger
Perfekt! Klappt gut! Danke!
Und jetzt: wie könnte ich da noch eine Spalte reinbringen in der ich sehen kann, wieviele Posts in den letzten 7 Tagen und in den letzten 30 Tagen gemacht wurden?
Das muss ja so ähnlich sein wie

Code: Alles auswählen

$sql3 = "SELECT count(post_id) as total_posts FROM ".$row[name]."_phpbb_posts";
nur mit einem WHERE + Zeitangabe, oder?

Verfasst: Mi 25.Apr, 2007 13:12
von oxpus
7 Tage:

Code: Alles auswählen

... WHERE post_time <= " . time() - 7 * 86400 . " ...
30 Tage:

Code: Alles auswählen

... WHERE post_time <= " . time() - 30 * 86400 . " ...

Verfasst: Mi 25.Apr, 2007 13:34
von Holger
Danke!
Habe es mal versucht mit:

Code: Alles auswählen

$sql4 = "SELECT count(post_id) as posts7 FROM ".$row[name]."_phpbb_posts WHERE post_time <= " . time() - 7 * 86400 . ""; 
$result4 = mysql_query($sql4); 
if ($result4) 
{ 
$row4 = mysql_fetch_array($result4); 
mysql_freeresult($result4); 
$posts7 = $row4['posts7']; 
} 
else 
{ 
die('Could not fetch posts for the last 7 days'); 
}
Bekomme dann aber die Fehlermeldung "Could not fetch posts for the last 7 days".
Ich habe wohl die SELECT-Zeile falsch zusammengebaut, oder?

Verfasst: Mi 25.Apr, 2007 14:10
von oxpus
So wäre es besser:

Code: Alles auswählen

$sql4 = "SELECT count(post_id) as posts7 FROM ".$row[name]."_phpbb_posts WHERE post_time <= " . time() - 7 * 86400;

Verfasst: Mi 25.Apr, 2007 14:20
von Holger
Weiterhin das gleiche Ergebnis. Ich habe jetzt insgesamt

Code: Alles auswählen

if($_REQUEST['action'] == 'list')
{

$result = mysql_query('select * from phpbb_forums');
while($row = mysql_fetch_assoc($result))
{


$sql3 = "SELECT count(post_id) as total_posts FROM ".$row[name]."_phpbb_posts"; 
$result3 = mysql_query($sql3); 
if ($result3) 
{ 
$row3 = mysql_fetch_array($result3); 
mysql_freeresult($result3); 
$total_posts = $row3['total_posts']; 
} 
else 
{ 
die('Could not fetch total posts'); 
}


$sql4 = "SELECT count(post_id) as posts7 FROM ".$row[name]."_phpbb_posts WHERE post_time <= " . time() - 7 * 86400;
$result4 = mysql_query($sql4); 
if ($result4) 
{ 
$row4 = mysql_fetch_array($result4); 
mysql_freeresult($result4); 
$posts7 = $row4['posts7']; 
} 
else 
{ 
die('Could not fetch posts for the last 7 days'); 
}

$sql5 = "SELECT count(post_id) as posts30 FROM ".$row[name]."_phpbb_posts WHERE post_time <= " . time() - 30 * 86400;
$result5 = mysql_query($sql5); 
if ($result5) 
{ 
$row5 = mysql_fetch_array($result5); 
mysql_freeresult($result5); 
$posts30 = $row5['posts30']; 
} 
else 
{ 
die('Could not fetch posts for the last 30 days'); 
}


	$result2 = mysql_fetch_assoc(mysql_query('select * from '.$row[name].'_phpbb_config where config_name="sitename"'));
	$fname = $result2['config_value'];
	$flrow .= '
	<tr>
	<td class="row1" nowrap="nowrap">'.$row[name].'</td>
	<td class="row2">'.$fname.'</td>
	<td class="row1"><b><a href="'.$row[name].'/" target="_parent">Click Here</a></b></td>
	<td class="row2"><b>'.$total_posts.'</b></td>
	<td class="row2"><b>'.$posts7.' / '.$posts30.'</b></td>
  </tr>';
}
if(!$flrow)
{
	$flrow = '<td class="row1" nowrap="nowrap" colspan="3">No forums!</td>';
}
amfr_header();
print '
<h1>Admin</h1>

<h1>Forums List</h1>

<table width="100%" cellpadding="4" cellspacing="1" border="0" class="forumline">
  <tr>
	<th nowrap="nowrap" height="25" class="thCornerL">Access Name</th>
	<th height="25" class="thTop">Forum Name</th>
	<th height="25" class="thTop">View Forum</th>
	<th height="25" class="thTop">Number of posts</th>
	<th height="25" class="thTop">New posts 7 / 30</th>
  </tr>
'.$flrow.'
</table>';
amfr_footer();
exit;
}

Verfasst: Mi 25.Apr, 2007 16:25
von oxpus
1. Gibt es in der besagten Tabelle das Feld "post_time" überhaupt?
2. Klappt es, wenn Du " . time() - 7 * 86400" durch $timespan ersetzt und vor der Abfrage

Code: Alles auswählen

$timespan = time();
$timespan -= 7 * 86400;
einfügst?
Für die 30 Tage dann analog?

...

Verfasst: Mi 25.Apr, 2007 16:32
von Holger
post_time ist ja ein Standard-Feld in phpBB:

Code: Alles auswählen

CREATE TABLE phpbb_posts (
   post_id mediumint(8) UNSIGNED NOT NULL auto_increment,
   topic_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
   forum_id smallint(5) UNSIGNED DEFAULT '0' NOT NULL,
   poster_id mediumint(8) DEFAULT '0' NOT NULL,
   post_time int(11) DEFAULT '0' NOT NULL,
   poster_ip char(8) NOT NULL,
   post_username varchar(25),
   enable_bbcode tinyint(1) DEFAULT '1' NOT NULL,
   enable_html tinyint(1) DEFAULT '0' NOT NULL,
   enable_smilies tinyint(1) DEFAULT '1' NOT NULL,
   enable_sig tinyint(1) DEFAULT '1' NOT NULL,
   post_edit_time int(11),
   post_edit_count smallint(5) UNSIGNED DEFAULT '0' NOT NULL,
   PRIMARY KEY (post_id),
   KEY forum_id (forum_id),
   KEY topic_id (topic_id),
   KEY poster_id (poster_id),
   KEY post_time (post_time)
);
Ich versuche die alternative $timespan:

Code: Alles auswählen

$timespan = time(); 
$timespan -= 7 * 86400;
$sql4 = "SELECT count(post_id) as posts7 FROM ".$row[name]."_phpbb_posts WHERE post_time <= ".$timespan;
$result4 = mysql_query($sql4); 
if ($result4) 
{ 
$row4 = mysql_fetch_array($result4); 
mysql_freeresult($result4); 
$posts7 = $row4['posts7']; 
} 
else 
{ 
die('Could not fetch posts for the last 7 days'); 
}

$timespan = time(); 
$timespan -= 30 * 86400;
$sql5 = "SELECT count(post_id) as posts30 FROM ".$row[name]."_phpbb_posts WHERE post_time <= ".$timespan;
$result5 = mysql_query($sql5); 
if ($result5) 
{ 
$row5 = mysql_fetch_array($result5); 
mysql_freeresult($result5); 
$posts30 = $row5['posts30']; 
} 
else 
{ 
die('Could not fetch posts for the last 30 days'); 
}

Verfasst: Mi 25.Apr, 2007 17:47
von oxpus
Ja und???
Weiterhin Fehler?

Verfasst: Do 26.Apr, 2007 08:48
von Holger
Sorry, war AFK ;-)
DANKE! Klappt bestens!

Ah stopp!
Neeeee, irgendetwas ist komisch!
Es werden meist mehr new posts in 7 Tagen angezeigt, als in 30, und das kann ja nicht stimmen! Der Wert kann ja höchstens gleich sein!

/H