Herkunft zählen
Hi,
ich möchte gerne in einer Tabelle darstellen, aus welchem Land die meisten User kommen. Dazu dachte ich mir, erstelle ich eine Datenbankabfrage ähnlich der Abfrage nach der Anzahl der Forenbeiträge. Nun werden die Forenbeiträge jedoch schon beim Erstellen in die Datenbank-Spalte Pärfix_forumcat / forumcat_postcount in gezählter Forum abgelegt. Das geschieht bei der Angabe der Herkunft leider nicht. Nun wollte ich dieses auch nicht nachträglich umfummeln, sondern überlege gerade, ob man nicht mit der Angabe aus Präfix_user / user_country das trotzdem erreichen kann. Man könnte ja einfach alle user_country - Einträge in einer neuen Tabelle Präfix_usercountry_count in der alle möglichen Angaben als Zeilen vorhanden sind um pro Aufruf jeweils einen Zähler erhöht ablegen und diese neue Tabelle dann zur Anzeige auslesen. Das wäre nun mein Plan B, Gibt es eine php/sql - Formulierung, damit ich mir die neue Extratabelle sparen könnte und trotzdem die TOP10 der Herkunftsangaben bekomme?
ich möchte gerne in einer Tabelle darstellen, aus welchem Land die meisten User kommen. Dazu dachte ich mir, erstelle ich eine Datenbankabfrage ähnlich der Abfrage nach der Anzahl der Forenbeiträge. Nun werden die Forenbeiträge jedoch schon beim Erstellen in die Datenbank-Spalte Pärfix_forumcat / forumcat_postcount in gezählter Forum abgelegt. Das geschieht bei der Angabe der Herkunft leider nicht. Nun wollte ich dieses auch nicht nachträglich umfummeln, sondern überlege gerade, ob man nicht mit der Angabe aus Präfix_user / user_country das trotzdem erreichen kann. Man könnte ja einfach alle user_country - Einträge in einer neuen Tabelle Präfix_usercountry_count in der alle möglichen Angaben als Zeilen vorhanden sind um pro Aufruf jeweils einen Zähler erhöht ablegen und diese neue Tabelle dann zur Anzeige auslesen. Das wäre nun mein Plan B, Gibt es eine php/sql - Formulierung, damit ich mir die neue Extratabelle sparen könnte und trotzdem die TOP10 der Herkunftsangaben bekomme?
ich denke das könnte mir GROUP BY gehen.. in der sql anweisung..
habe damit aber ehr selten gearbeitet.. sollte aber klappen.. so sortierst du die ausgabe nach country..
ähm müsste man testen
EDIT:
Beispielcode:
Beispielausgabe:
vielleicht kannste damit weiter arbeiten..
thx an maXus
habe damit aber ehr selten gearbeitet.. sollte aber klappen.. so sortierst du die ausgabe nach country..
ähm müsste man testen

EDIT:
Beispielcode:
|
|
PHP-Quelltext |
1 2 3 4 5 6 7 8 9 10 |
<?php
$query = $DB->query("SELECT COUNT(`user_id`) as anzahl,`user_country` as country FROM `".$db_tab['user']."` WHERE `user_activate`='1' GROUP BY `user_country`");
while($ergebnis=$DB->fetch_assoc($query)) {
$ausgabe[$ergebnis['anzahl']] = $ergebnis['country'];
}
krsort($ausgabe);
echo "<pre>";
print_r($ausgabe);
echo "</pre><hr>";
?>
|
Beispielausgabe:
|
|
Quellcode |
1 2 3 4 5 6 7 8 |
Array
(
[497] => def
[215] => ger
[4] => aut
[3] => ch
[1] => oth
)
|
vielleicht kannste damit weiter arbeiten..

thx an maXus
|
Achtung: Dirk Kántor ist unterwegs! Er verteilt gerne Verwarnungen ohne vorher darüber diskutiert zu haben. |
Hi,
ich sag mal DANKE für Eure Gedanken! Leider bekomme ich es nicht so ganz zu Ende formuliert.
Wenn ich Euren/Deinen php-Code nutze, dann bekomme ich es nicht so formuliert, dass ich $ausgabe im template aufrufen kann. Außerdem würde sich ja auch noch das nächste Problem ergeben, dass ich zwar die "Kürzel" hätte, also beispielsweise "ger", aber noch nicht "Deutschland". Könnte man das mit "include inc/lang/de/profile.php" machen, wobei auch noch aus "'origin_ger'=>'Deutschland'" "Deutschland heraus gelöst werden.
Dann hätte ich da auch noch das rechnerische Problem:
Bei meinem Testkit habe ich aktuell:
Nutze ich jedoch den Code, so erhalte ich:
Hmm, ich habe da zwar eine andere Lösung, doch die würde, um auch mein Mega-Herkunft-Addon abbilden zu können, ziemlich lang werden.
Ich rufe erst folgendes in der php-Datei auf:
Was ich dann in den templates auslesen kann:
msb_top_herkunft
msb_top_herkunft_row
Das benötigt natürlich eine Extra-Datenbank-Tabelle und ein einmaliges Aufrufen der Datei mit der Post [aufruf] - Übergabe.
Außerdem müßte ich ja diese Tabelle erstmals komplett anlegen. Da mein Mega-HerkunftsAddon knapp 200 Länder umfasst, würde ich mir diese Schreiberei gerne sparen.
Das geht aber leider nicht ohne Eure Hilfe!
ich sag mal DANKE für Eure Gedanken! Leider bekomme ich es nicht so ganz zu Ende formuliert.
Wenn ich Euren/Deinen php-Code nutze, dann bekomme ich es nicht so formuliert, dass ich $ausgabe im template aufrufen kann. Außerdem würde sich ja auch noch das nächste Problem ergeben, dass ich zwar die "Kürzel" hätte, also beispielsweise "ger", aber noch nicht "Deutschland". Könnte man das mit "include inc/lang/de/profile.php" machen, wobei auch noch aus "'origin_ger'=>'Deutschland'" "Deutschland heraus gelöst werden.
Dann hätte ich da auch noch das rechnerische Problem:
Bei meinem Testkit habe ich aktuell:
Zitat
5 Keine Angabe
2 Deutschland
1 Östereich
1 Schweiz
0 Niederlande
0 Anderes Land
Nutze ich jedoch den Code, so erhalte ich:
Zitat
Array
(
[4] => def
[3] => ger
[1] => ch
)
Hmm, ich habe da zwar eine andere Lösung, doch die würde, um auch mein Mega-Herkunft-Addon abbilden zu können, ziemlich lang werden.
Ich rufe erst folgendes in der php-Datei auf:
|
|
PHP-Quelltext |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
<?php
if (isset($_POST['action'])) $ACTION=$_POST['action'];
else $ACTION='view';
$countcountrydef = $DB->fetch_array($DB->query("select count(user_country) from ".$db_tab['user']." where user_country='def' "));
$countcountrydef = $countcountrydef[0];
$countcountryger = $DB->fetch_array($DB->query("select count(user_country) from ".$db_tab['user']." where user_country='ger' "));
$countcountryger = $countcountryger[0];
$countcountryaut = $DB->fetch_array($DB->query("select count(user_country) from ".$db_tab['user']." where user_country='aut' "));
$countcountryaut = $countcountryaut[0];
$countcountrych = $DB->fetch_array($DB->query("select count(user_country) from ".$db_tab['user']." where user_country='ch' "));
$countcountrych = $countcountrych[0];
$countcountrynl = $DB->fetch_array($DB->query("select count(user_country) from ".$db_tab['user']." where user_country='nl' "));
$countcountrynl = $countcountrynl[0];
$countcountryoth = $DB->fetch_array($DB->query("select count(user_country) from ".$db_tab['user']." where user_country='oth' "));
$countcountryoth = $countcountryoth[0];
if ($ACTION==$_POST['aufruf']) {
$DB->query("UPDATE ".$db_tab['msb_count']." SET msb_count= ".$countcountrydef." WHERE msb_kuerzel = 'def'");
$DB->query("UPDATE ".$db_tab['msb_count']." SET msb_count= ".$countcountryger." WHERE msb_kuerzel = 'ger'");
$DB->query("UPDATE ".$db_tab['msb_count']." SET msb_count= ".$countcountryaut." WHERE msb_kuerzel = 'aut'");
$DB->query("UPDATE ".$db_tab['msb_count']." SET msb_count= ".$countcountrych." WHERE msb_kuerzel = 'ch'");
$DB->query("UPDATE ".$db_tab['msb_count']." SET msb_count= ".$countcountrynl." WHERE msb_kuerzel = 'nl'");
$DB->query("UPDATE ".$db_tab['msb_count']." SET msb_count= ".$countcountryoth." WHERE msb_kuerzel = 'oth'");
}
$getmsb_herkunft_anzahl=$DB->query("SELECT * FROM ".$db_tab['msb_config']." WHERE msb_config_id=26 ");
while($msb_herkunft_anzahl=$DB->fetch_array($getmsb_herkunft_anzahl)) {
$herkunft_anzahl = htmlentities($msb_herkunft_anzahl['msb_config_anzahl']);
$max_herkunft_title = htmlentities($msb_herkunft_anzahl['msb_config_max_title']); }
$getherkunftinfo=$DB->query("SELECT * FROM ".$db_tab['msb_count']." WHERE msb_kriterium = 'country' ORDER by msb_count DESC LIMIT ".$herkunft_anzahl."");
while($herkunftinfo=$DB->fetch_array($getherkunftinfo)) {
$herkunft_views = htmlentities($herkunftinfo['msb_count']);
$herkunft_title = cutstring($herkunftinfo['msb_name'], $max_herkunft_title);
$herkunft_titlemo = htmlentities($herkunftinfo['mab_name']);
eval("\$msb_top_herkunft_row .= \"".getTemplate("msb/msb_top_herkunft_row")."\";");
}
eval("\$msb_top_herkunft .= \"".getTemplate("msb/msb_top_herkunft")."\";");
?>
|
Was ich dann in den templates auslesen kann:
msb_top_herkunft
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 |
<table align="center" width="97%" cellpadding="4" cellspacing="1" class="standard" border="0"> <tr> <td class="heads" colspan="2"><b>Top $herkunft_anzahl Herkunftsorte</b></td> </tr> <td class="even">Anzahl</td> <td class="even">Ort</td> </tr> $msb_top_herkunft_row </table> <br> |
msb_top_herkunft_row
|
|
Quellcode |
1 2 3 4 |
<tr> <td class="even">$herkunft_views</td> <td class="even">$herkunft_title</td> </tr> |
Das benötigt natürlich eine Extra-Datenbank-Tabelle und ein einmaliges Aufrufen der Datei mit der Post [aufruf] - Übergabe.
Außerdem müßte ich ja diese Tabelle erstmals komplett anlegen. Da mein Mega-HerkunftsAddon knapp 200 Länder umfasst, würde ich mir diese Schreiberei gerne sparen.
Das geht aber leider nicht ohne Eure Hilfe!
Ähnliche Themen
-
alte Versionen [1.6.03|1.6.1|1.6.4] »-
Counter zählt nicht richtig
(15. Februar 2008, 00:09)
-
alte Versionen [1.6.03|1.6.1|1.6.4] »-
Geburtsdatum als freiwilliges Feld einrichten
(6. Januar 2008, 09:48)
-
alte Versionen [1.6.03|1.6.1|1.6.4] »-
Feld "Herkunft" aus Pflichtfelderhack löschen
(5. Januar 2008, 00:00)



