Fehler beim Auswerten des Geburtsdatum
Fehler beim Auswerten des Geburtsdatum
Liebes Entwicklungsteam,
ich habe im Dezember Admidio für einen Kanuverein installiert (240 Mitglieder , 360 ehemalige). Hochgeladen per .csv. Jetzt habe ich die Version 2.4.4 installiert.
Bei der Auswertung des Geburtsdatum mit den Plugins sind folgende Probleme aufgetreten:
- Statistik: bei der Altersabfrage hatte der Verein 3 Mitglieder weniger als die Gesamtanzahl ausweist, Workaround: Abfrage nach Jahrgängen, also alle, die zwischen dem 1.1.xxx und dem 31.12.xxx geboren sind - muss jährlich angepasst werden.
- Geburtstagsliste: bei der Abfrage nach 365 Tagen werden 18 Mitglieder gar nicht angezeigt.
- birthday: Fehlermeldung: CODE: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '2 ORDER BY days_to_bdate desc, last_name, first_name' at line 27
Wenn ich mir nun die Orginaldatenbank ansehe, stelle ich fest, dass das Geburtsdatum in adm_user_data als varchar(255) in der der Form 1944-09-08 abgelegt ist.
Ist das so richtig? Was kann ich tun, um hier zuverlässig Aussagen über Geburtstage, Jahrgangsstatistik usw machen zu können?
Viele Grüße aus dem Norden
Norbert
ich habe im Dezember Admidio für einen Kanuverein installiert (240 Mitglieder , 360 ehemalige). Hochgeladen per .csv. Jetzt habe ich die Version 2.4.4 installiert.
Bei der Auswertung des Geburtsdatum mit den Plugins sind folgende Probleme aufgetreten:
- Statistik: bei der Altersabfrage hatte der Verein 3 Mitglieder weniger als die Gesamtanzahl ausweist, Workaround: Abfrage nach Jahrgängen, also alle, die zwischen dem 1.1.xxx und dem 31.12.xxx geboren sind - muss jährlich angepasst werden.
- Geburtstagsliste: bei der Abfrage nach 365 Tagen werden 18 Mitglieder gar nicht angezeigt.
- birthday: Fehlermeldung: CODE: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '2 ORDER BY days_to_bdate desc, last_name, first_name' at line 27
Wenn ich mir nun die Orginaldatenbank ansehe, stelle ich fest, dass das Geburtsdatum in adm_user_data als varchar(255) in der der Form 1944-09-08 abgelegt ist.
Ist das so richtig? Was kann ich tun, um hier zuverlässig Aussagen über Geburtstage, Jahrgangsstatistik usw machen zu können?
Viele Grüße aus dem Norden
Norbert
Re: Fehler beim Auswerten des Geburtsdatum
Hallo Norbert,
die Speicherung des Geburtsdatums im Format YYYY-MM-DD ist richtig.
Ich selber arbeite nur am Birthday-Plugin mit und kann da mal nach dem Fehler suchen. Hast du evtl. Zugriff auf eine PHP-Logdatei?
Falls ja, dann könntest du das Debug-Flag aktivieren und mal den fehlerhaften SQL-Code hier posten.
Gruß
Fasse
die Speicherung des Geburtsdatums im Format YYYY-MM-DD ist richtig.
Ich selber arbeite nur am Birthday-Plugin mit und kann da mal nach dem Fehler suchen. Hast du evtl. Zugriff auf eine PHP-Logdatei?
Falls ja, dann könntest du das Debug-Flag aktivieren und mal den fehlerhaften SQL-Code hier posten.
Gruß
Fasse
Re: Fehler beim Auswerten des Geburtsdatum
Hallo Norbert,
betreffend des Statistik-Plugins: Wenn Personen fehlen, kann das daran liegen, dass die Bedingungen nicht alle Alterskategorien einschliessen. Leider ist die mit der Installation mitgelieferte Alterstatistik auch nicht korrekt formuliert (Es werden Profile doppelt ausgewählt). Im Bild im Anhang siehst du eine Statistik, die alle Profile einbeziehen sollte, auch solche ohne Altersangabe.
Bedenke aber, das pro Tabelle immer nur eine Rolle ausgewertet werden kann. Die 3 fehlenden Mitglieder könnten also auch eine andere Rollenzugehörigkeit haben.
Viele Grüsse
kcs
betreffend des Statistik-Plugins: Wenn Personen fehlen, kann das daran liegen, dass die Bedingungen nicht alle Alterskategorien einschliessen. Leider ist die mit der Installation mitgelieferte Alterstatistik auch nicht korrekt formuliert (Es werden Profile doppelt ausgewählt). Im Bild im Anhang siehst du eine Statistik, die alle Profile einbeziehen sollte, auch solche ohne Altersangabe.
Bedenke aber, das pro Tabelle immer nur eine Rolle ausgewertet werden kann. Die 3 fehlenden Mitglieder könnten also auch eine andere Rollenzugehörigkeit haben.
Viele Grüsse
kcs
- Dateianhänge
-
- amdep_alterstatistik.PNG (42.93 KiB) 12650 mal betrachtet
Re: Fehler beim Auswerten des Geburtsdatum
Hallo kcs
Danke erst mal für die schnelle Antwort, war den ganzen Tag auf einer Fortbildung zur Zukunft der traditionellen Sportvereine. Ich arbeite das mal LIFO ab:
Ja, da gab es Überlappungen, Hier nun die neue Abfrage:
und dann das Ergebnis:
Bei einer Gesamtheit von 238 werden nur 221 erfasst.
Viele Grüße aus dem Norden.
Norbert
Danke erst mal für die schnelle Antwort, war den ganzen Tag auf einer Fortbildung zur Zukunft der traditionellen Sportvereine. Ich arbeite das mal LIFO ab:
Ja, da gab es Überlappungen, Hier nun die neue Abfrage:
und dann das Ergebnis:
Bei einer Gesamtheit von 238 werden nur 221 erfasst.
Viele Grüße aus dem Norden.
Norbert
- Dateianhänge
-
- Die Abfrage
- alt2.jpg (99.95 KiB) 12642 mal betrachtet
-
- Hier das Ergebniss
- alt1..jpg (53.56 KiB) 12642 mal betrachtet
Re: Fehler beim Auswerten des Geburtsdatum
Hallo fasse,
auch Dir herzlichen Dank für die erste schnelle Antwort. Ich habe bei Strato keine PHP-Logdatei gefunden, Da gibt es was zu Joomla, aber da sind "nur" die Hackversuche der Seite drin. Hier aber der vollständige Fehlertext:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '2 ORDER BY days_to_bdate desc, last_name, first_name' at line 27
B A C K T R A C E
FILE: adm_program/system/db/db_mysql.php
LINE: 62
CALL: DBCommon->db_error()
FILE: adm_program/system/db/db_mysql.php
LINE: 172
CALL: DBMySQL->db_error()
FILE: adm_plugins/birthday/birthday.php
LINE: 163
CALL: DBMySQL->query()
FILE: adm_themes/modern/my_body_bottom.php
LINE: 18
CALL: include('adm_plugins/birthday/birthday.php')
FILE: adm_program/system/overall_footer.php
LINE: 19
CALL: require('adm_themes/modern/my_body_bottom.php')
FILE: adm_plugins/statistics/gui/editor.php
LINE: 605
CALL: require('adm_program/system/overall_footer.php')
Hilft das?
Viele Grüße
Norbert
auch Dir herzlichen Dank für die erste schnelle Antwort. Ich habe bei Strato keine PHP-Logdatei gefunden, Da gibt es was zu Joomla, aber da sind "nur" die Hackversuche der Seite drin. Hier aber der vollständige Fehlertext:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '2 ORDER BY days_to_bdate desc, last_name, first_name' at line 27
B A C K T R A C E
FILE: adm_program/system/db/db_mysql.php
LINE: 62
CALL: DBCommon->db_error()
FILE: adm_program/system/db/db_mysql.php
LINE: 172
CALL: DBMySQL->db_error()
FILE: adm_plugins/birthday/birthday.php
LINE: 163
CALL: DBMySQL->query()
FILE: adm_themes/modern/my_body_bottom.php
LINE: 18
CALL: include('adm_plugins/birthday/birthday.php')
FILE: adm_program/system/overall_footer.php
LINE: 19
CALL: require('adm_themes/modern/my_body_bottom.php')
FILE: adm_plugins/statistics/gui/editor.php
LINE: 605
CALL: require('adm_program/system/overall_footer.php')
Hilft das?
Viele Grüße
Norbert
Re: Fehler beim Auswerten des Geburtsdatum
Hallo Norbert,
kannst du mal bitte in die birthday.php des Plugins gehen. Dort müsste ungefähr in Zeile 162 folgendes stehen:
kannst du mal bitte in die birthday.php des Plugins gehen. Dort müsste ungefähr in Zeile 162 folgendes stehen:
Code: Alles auswählen
//echo $sql; exit();[code]. Entferne dort mal die beiden Slashs und lass dann noch mal das Plugin laufen. Nun sollte an der Stelle des Plugins ein SQL-Statement ausgegeben werden. Poste das mal bitte hier.
Viele Grüße
Fasse
Re: Fehler beim Auswerten des Geburtsdatum
Hallo fasse,
auch Sonntagsschicht, ich bin von dem Service begeistert. Hier das SQL-Statemant:
SELECT DISTINCT usr_id, usr_login_name, last_name.usd_value as last_name, first_name.usd_value as first_name, birthday.bday as birthday, birthday.bdate, DATEDIFF(birthday.bdate, '2014-02-02 14:30:20') AS days_to_bdate, YEAR(bdate) - YEAR(bday) AS age, email.usd_value as email, gender.usd_value as gender FROM adm_users users JOIN ( (SELECT usd_usr_id, usd_value AS bday, year('2014-02-02 14:30:20') || '-' || month(usd_value) || '-' || dayofmonth(bd1.usd_value) AS bdate FROM adm_user_data bd1 WHERE DATEDIFF(year('2014-02-02 14:30:20') || '-' || month(usd_value) || '-' || dayofmonth(bd1.usd_value), '2014-02-02 14:30:20') BETWEEN -5 AND 10 AND usd_usf_id = 10) UNION (SELECT usd_usr_id, usd_value AS bday, year('2014-02-02 14:30:20')-1 || '-' || month(usd_value) || '-' || dayofmonth(bd2.usd_value) AS bdate FROM adm_user_data bd2 WHERE DATEDIFF(year('2014-02-02 14:30:20')-1 || '-' || month(usd_value) || '-' || dayofmonth(bd2.usd_value), '2014-02-02 14:30:20') BETWEEN -5 AND 10 AND usd_usf_id = 10) UNION (SELECT usd_usr_id, usd_value AS bday, year('2014-02-02 14:30:20')+1 || '-' || month(usd_value) || '-' || dayofmonth(bd3.usd_value) AS bdate FROM adm_user_data bd3 WHERE DATEDIFF(year('2014-02-02 14:30:20')+1 || '-' || month(usd_value) || '-' || dayofmonth(bd3.usd_value), '2014-02-02 14:30:20') BETWEEN -5 AND 10 AND usd_usf_id = 10) ) birthday ON birthday.usd_usr_id = usr_id LEFT JOIN adm_user_data as last_name ON last_name.usd_usr_id = usr_id AND last_name.usd_usf_id = 1 LEFT JOIN adm_user_data as first_name ON first_name.usd_usr_id = usr_id AND first_name.usd_usf_id = 2 LEFT JOIN adm_user_data as email ON email.usd_usr_id = usr_id AND email.usd_usf_id = 12 LEFT JOIN adm_user_data as gender ON gender.usd_usr_id = usr_id AND gender.usd_usf_id = 11 LEFT JOIN adm_members ON mem_usr_id = usr_id AND mem_begin <= '2014-02-02' AND mem_end > '2014-02-02' JOIN adm_roles ON mem_rol_id = rol_id AND rol_valid = 1 JOIN adm_categories ON rol_cat_id = cat_id AND cat_org_id = 1 WHERE usr_valid = 1 AND mem_rol_id in 2 ORDER BY days_to_bdate desc, last_name, first_name
Viele Grüße
Norbert
auch Sonntagsschicht, ich bin von dem Service begeistert. Hier das SQL-Statemant:
SELECT DISTINCT usr_id, usr_login_name, last_name.usd_value as last_name, first_name.usd_value as first_name, birthday.bday as birthday, birthday.bdate, DATEDIFF(birthday.bdate, '2014-02-02 14:30:20') AS days_to_bdate, YEAR(bdate) - YEAR(bday) AS age, email.usd_value as email, gender.usd_value as gender FROM adm_users users JOIN ( (SELECT usd_usr_id, usd_value AS bday, year('2014-02-02 14:30:20') || '-' || month(usd_value) || '-' || dayofmonth(bd1.usd_value) AS bdate FROM adm_user_data bd1 WHERE DATEDIFF(year('2014-02-02 14:30:20') || '-' || month(usd_value) || '-' || dayofmonth(bd1.usd_value), '2014-02-02 14:30:20') BETWEEN -5 AND 10 AND usd_usf_id = 10) UNION (SELECT usd_usr_id, usd_value AS bday, year('2014-02-02 14:30:20')-1 || '-' || month(usd_value) || '-' || dayofmonth(bd2.usd_value) AS bdate FROM adm_user_data bd2 WHERE DATEDIFF(year('2014-02-02 14:30:20')-1 || '-' || month(usd_value) || '-' || dayofmonth(bd2.usd_value), '2014-02-02 14:30:20') BETWEEN -5 AND 10 AND usd_usf_id = 10) UNION (SELECT usd_usr_id, usd_value AS bday, year('2014-02-02 14:30:20')+1 || '-' || month(usd_value) || '-' || dayofmonth(bd3.usd_value) AS bdate FROM adm_user_data bd3 WHERE DATEDIFF(year('2014-02-02 14:30:20')+1 || '-' || month(usd_value) || '-' || dayofmonth(bd3.usd_value), '2014-02-02 14:30:20') BETWEEN -5 AND 10 AND usd_usf_id = 10) ) birthday ON birthday.usd_usr_id = usr_id LEFT JOIN adm_user_data as last_name ON last_name.usd_usr_id = usr_id AND last_name.usd_usf_id = 1 LEFT JOIN adm_user_data as first_name ON first_name.usd_usr_id = usr_id AND first_name.usd_usf_id = 2 LEFT JOIN adm_user_data as email ON email.usd_usr_id = usr_id AND email.usd_usf_id = 12 LEFT JOIN adm_user_data as gender ON gender.usd_usr_id = usr_id AND gender.usd_usf_id = 11 LEFT JOIN adm_members ON mem_usr_id = usr_id AND mem_begin <= '2014-02-02' AND mem_end > '2014-02-02' JOIN adm_roles ON mem_rol_id = rol_id AND rol_valid = 1 JOIN adm_categories ON rol_cat_id = cat_id AND cat_org_id = 1 WHERE usr_valid = 1 AND mem_rol_id in 2 ORDER BY days_to_bdate desc, last_name, first_name
Viele Grüße
Norbert
Re: Fehler beim Auswerten des Geburtsdatum
Hallo Norbert
Habe den Fehler möglicherweise gefunden:
<=26j bedeutet, vor und bis zum 26. Geburtstag und leider nicht bis zum vollendeten 26. Altersjahr.
Die Bedingung müsste also in diesem Fall <27j Jahre lauten.
Funktioniert, wenn du die Bedingungen entsprechend umformulierst?
Gruss
kcs
Habe den Fehler möglicherweise gefunden:
<=26j bedeutet, vor und bis zum 26. Geburtstag und leider nicht bis zum vollendeten 26. Altersjahr.
Die Bedingung müsste also in diesem Fall <27j Jahre lauten.
Funktioniert, wenn du die Bedingungen entsprechend umformulierst?
Gruss
kcs
- Dateianhänge
-
- amdep_alterstatistik.PNG (43.49 KiB) 12556 mal betrachtet
Re: Fehler beim Auswerten des Geburtsdatum
Hallo kcs,
ja, probieren geht über studieren! Du hast recht, das ist das Problem an dieser Stelle. Die Zahlenwelt ist nun identisch mit den Jahrgangszahlen und meiner eigenen Statistik.
Logisch ist das aber noch nicht ganz: <= 26j ist mathematisch identisch mit <27j, aber muss eine Programmiersprache, wie PHP mit der Mathematik identisch sein? Könnte PHP so denken: Ermittle die Tagedifferenzen zwischen Geburtsdatum und aktuellem Datum, diese Lebenstage teile durch 365,25 (wegen des Schaltjahres) und was dann raus kommt wird mathematisch gerundet und schon sind alle Personen, die die älter als 26,55 Jahre sind 27 geworden.
Egal mit der "kleiner" Abfrage sollten die Sportbünde zufrieden sein.
Bleibt nur noch die Frage, warum diese Personen in der Geburtstagsliste erst gar nicht auftauchen.
Viele Grüße und noch mal herzlichen Dank!
Norbert
ja, probieren geht über studieren! Du hast recht, das ist das Problem an dieser Stelle. Die Zahlenwelt ist nun identisch mit den Jahrgangszahlen und meiner eigenen Statistik.
Logisch ist das aber noch nicht ganz: <= 26j ist mathematisch identisch mit <27j, aber muss eine Programmiersprache, wie PHP mit der Mathematik identisch sein? Könnte PHP so denken: Ermittle die Tagedifferenzen zwischen Geburtsdatum und aktuellem Datum, diese Lebenstage teile durch 365,25 (wegen des Schaltjahres) und was dann raus kommt wird mathematisch gerundet und schon sind alle Personen, die die älter als 26,55 Jahre sind 27 geworden.
Egal mit der "kleiner" Abfrage sollten die Sportbünde zufrieden sein.
Bleibt nur noch die Frage, warum diese Personen in der Geburtstagsliste erst gar nicht auftauchen.
Viele Grüße und noch mal herzlichen Dank!
Norbert
Re: Fehler beim Auswerten des Geburtsdatum
Hallo Norbert,
du musst in der config.php von dem Plugin bei der Variablen $plg_rolle_sql klammern um die Id der Rolle setzen. In deinem Fall also (2).
Viele Grüße
Fasse
du musst in der config.php von dem Plugin bei der Variablen $plg_rolle_sql klammern um die Id der Rolle setzen. In deinem Fall also (2).
Viele Grüße
Fasse
Re: Fehler beim Auswerten des Geburtsdatum
Hallo fasse,
danke für den Hinweis mit der Klammer in der Rollenauswahl bei birthday. Das klappt nun tatsächlich.
Habe damit dann auch versucht den Fehler in der Geburtstagsliste zu finden. Leider bricht bithday bei 365 Tagen Vorausschau am Ende des Jahres ab.
Also habe ich die fehlenden 18 Mitglieder in der Geburtstagsliste per Execl Sort ermittelt: Alle Personen waren und sind in einer Rolle "erw. Vorstand". Ausgewertet wird ausschließlich die Rolle Mitglied, in der natürlich auch die Personen von "erw.Vorstand" sind. Nachdem ich dann die Auswahl auf alle Kategorien erweitert hatte, kamen immerhin schon 8 weitere dazu, aber 10 fehlen immer noch. (siehe dazu Geburtstagsliste - Greift immer nur auf eine Rolle zu vom 20.1.14)
Werde in den nächsten Tagen weiter forschen, oder gibt es einen Tipp, wo ich verbindliche die auszuwertende Rolle für die Geburtstagsliste eintragen kann.
Viele Grüße aus dem Norden
Norbert
danke für den Hinweis mit der Klammer in der Rollenauswahl bei birthday. Das klappt nun tatsächlich.
Habe damit dann auch versucht den Fehler in der Geburtstagsliste zu finden. Leider bricht bithday bei 365 Tagen Vorausschau am Ende des Jahres ab.
Also habe ich die fehlenden 18 Mitglieder in der Geburtstagsliste per Execl Sort ermittelt: Alle Personen waren und sind in einer Rolle "erw. Vorstand". Ausgewertet wird ausschließlich die Rolle Mitglied, in der natürlich auch die Personen von "erw.Vorstand" sind. Nachdem ich dann die Auswahl auf alle Kategorien erweitert hatte, kamen immerhin schon 8 weitere dazu, aber 10 fehlen immer noch. (siehe dazu Geburtstagsliste - Greift immer nur auf eine Rolle zu vom 20.1.14)
Werde in den nächsten Tagen weiter forschen, oder gibt es einen Tipp, wo ich verbindliche die auszuwertende Rolle für die Geburtstagsliste eintragen kann.
Viele Grüße aus dem Norden
Norbert
Re: Fehler beim Auswerten des Geburtsdatum
Hallo rmb,
habe nun in den Einstellungen und des Speicherungen in der Datenbank geforscht. Ich kann leider keine Veränderung bei der Auswahl der Rollen feststellen, es werden immer die gleichen Mitglieder ausgewertet, egal, welche Rolle ausgewählt wird. Bei der Einschränkung der Kategorie auf Allgemein werden dann bestimmte Mitglieder wieder ausgeschlossen. Eine Auswertung über alle Mitglieder des Vereins kann ich nicht erhalten.
Nun habe ich keine Idee mehr.
Zweites Problem sind die enormen Antwortzeiten, wenn man das Plugin mit Einstellungen und Liste auf der rechten Seite einblendet.
Viele Grüße
Norbert
habe nun in den Einstellungen und des Speicherungen in der Datenbank geforscht. Ich kann leider keine Veränderung bei der Auswahl der Rollen feststellen, es werden immer die gleichen Mitglieder ausgewertet, egal, welche Rolle ausgewählt wird. Bei der Einschränkung der Kategorie auf Allgemein werden dann bestimmte Mitglieder wieder ausgeschlossen. Eine Auswertung über alle Mitglieder des Vereins kann ich nicht erhalten.
Nun habe ich keine Idee mehr.
Zweites Problem sind die enormen Antwortzeiten, wenn man das Plugin mit Einstellungen und Liste auf der rechten Seite einblendet.
Viele Grüße
Norbert