Summieren

PHP, Ajax, CSS, HTML, Javascript
Eben für die wirklich Harten, die alles selber machen.
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Summieren

Beitrag 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
Zuletzt geändert von Holger am Fr 23.Feb, 2007 14:07, insgesamt 1-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag 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...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag von Holger »

Danke!
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag 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.
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag 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 ;)
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag von Holger »

Japp, das habe ich gefunden, ich möchte dies aber von "aussen" abrufen, also nicht aus phpBB heraus!
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Dann eine Abfrage:

Code: Alles auswählen

SELECT count(post_id) as total_posts FROM phpbb_posts;
;)
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag von Holger »

Total wäre das dann

Code: Alles auswählen

$summe = SELECT count(post_id) as total_posts FROM phpbb_posts;
?
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag 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.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag 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
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag 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 ;)
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag 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>');
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Ich hab in meinem letzten Post doch schon den kompletten Code gepostet ;)
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag von Holger »

Klappt! Danke!
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag 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
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag 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...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag 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?
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag 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 . " ...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag 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?
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag 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;
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag 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;
}
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag 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?

...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag 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'); 
}
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Ja und???
Weiterhin Fehler?
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag 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
Zuletzt geändert von Holger am Do 26.Apr, 2007 08:54, insgesamt 1-mal geändert.
Antworten