Ältesten Benutzer und Benutzerin anzeigen

Hast du Probleme oder Fragen bei der Einrichtung bestimmter Plugins ? Diese kannst du hier loswerden.
suesemausw
Beiträge: 34
Registriert: 5. Apr 2012, 20:56
Wohnort: Steinbach
Kontaktdaten:

Ältesten Benutzer und Benutzerin anzeigen

Beitrag von suesemausw »

Hallo Admidio Team

ich benutze seid kurzem eure wirklich super Mitgliederverwaltung.
zusätzlich habe ich das Geburtstagsplugin Installiert.
Gibt es dort die Möglichkeit den Ältesten Benutzer anzeigen zu lassen über den Geburtstagkinder??
matzman2000
Former team member
Beiträge: 1087
Registriert: 2. Sep 2007, 17:12
Wohnort: Itzstedt
Kontaktdaten:

Re: Ältesten Benutzer und Benutzerin anzeigen

Beitrag von matzman2000 »

Dürfte so in dieser Art nicht funktionieren, nein.
Das ist eine seperate Abfrage. :?
suesemausw
Beiträge: 34
Registriert: 5. Apr 2012, 20:56
Wohnort: Steinbach
Kontaktdaten:

Re: Ältesten Benutzer und Benutzerin anzeigen

Beitrag von suesemausw »

Ich habe das birthday Plugin genommen und die birthday.php in der zeile 165 geändert in

Code: Alles auswählen

ORDER BY age '.$sort_sql.', age ';
und

Code: Alles auswählen

$plg_show_future = 365;
jetzt bekomme ich eine liste sortiert nach dem alter.

nun möchte ich aber nur den ersten sehen (also den älesten) was mache ich falsch??
Benutzeravatar
Thomas-RCV
Former team member
Beiträge: 786
Registriert: 1. Aug 2011, 15:06

Re: Ältesten Benutzer und Benutzerin anzeigen

Beitrag von Thomas-RCV »

Hallo,

wenn du bereits nach Alter absteigend sortiert hast, dann füge dem SQL Statement am Schluss ein LIMIT 1 hinzu.
Dadurch wird nur der 1. Datensatz ausgegeben,.... also der/die Älteste

VG Thomas
suesemausw
Beiträge: 34
Registriert: 5. Apr 2012, 20:56
Wohnort: Steinbach
Kontaktdaten:

Re: Ältesten Benutzer und Benutzerin anzeigen

Beitrag von suesemausw »

Ja da ist ja mein Problem wo soll ich das setzen??

Code: Alles auswählen

$sql    = 'SELECT DISTINCT usr_id, usr_login_name, 
                           last_name.usd_value as last_name, first_name.usd_value as first_name, city.usd_value as city,
                           birthday.bday as birthday, birthday.bdate,
                           DATEDIFF(birthday.bdate, \''.DATETIME_NOW.'\') AS days_to_bdate,
                           YEAR(bdate) - YEAR(bday) AS age,
                           email.usd_value as email, gender.usd_value as gender
             FROM '. TBL_USERS. ' users
             JOIN ( (SELECT usd_usr_id, usd_value AS bday,
							year(\''.DATETIME_NOW.'\') || \'-\' || month(usd_value) || \'-\' || dayofmonth(bd1.usd_value) AS bdate
					   FROM '. TBL_USER_DATA. ' bd1
					  WHERE DATEDIFF(year(\''.DATETIME_NOW.'\') || \'-\' || month(usd_value) || \'-\' || dayofmonth(bd1.usd_value), \''.DATETIME_NOW.'\') 
							BETWEEN -'.$plg_show_zeitraum.' AND '.$plg_show_future.'
						AND usd_usf_id = '. $gProfileFields->getProperty('BIRTHDAY', 'usf_id'). ')
				  UNION
					(SELECT usd_usr_id, usd_value AS bday,
							year(\''.DATETIME_NOW.'\')-1 || \'-\' || month(usd_value) || \'-\' || dayofmonth(bd2.usd_value) AS bdate
					   FROM '. TBL_USER_DATA. ' bd2
					  WHERE DATEDIFF(year(\''.DATETIME_NOW.'\')-1 || \'-\' || month(usd_value) || \'-\' || dayofmonth(bd2.usd_value), \''.DATETIME_NOW.'\') 
							BETWEEN -'.$plg_show_zeitraum.' AND '.$plg_show_future.'
						AND usd_usf_id = '. $gProfileFields->getProperty('BIRTHDAY', 'usf_id'). ')
				  UNION
					(SELECT usd_usr_id, usd_value AS bday,
							year(\''.DATETIME_NOW.'\')+1 || \'-\' || month(usd_value) || \'-\' || dayofmonth(bd3.usd_value) AS bdate
					   FROM '. TBL_USER_DATA. ' bd3
					  WHERE DATEDIFF(year(\''.DATETIME_NOW.'\')+1 || \'-\' || month(usd_value) || \'-\' || dayofmonth(bd3.usd_value), \''.DATETIME_NOW.'\') 
							BETWEEN -'.$plg_show_zeitraum.' AND '.$plg_show_future.'
						AND usd_usf_id = '. $gProfileFields->getProperty('BIRTHDAY', 'usf_id'). ')
				  ) birthday
               ON birthday.usd_usr_id = usr_id
             LEFT JOIN '. TBL_USER_DATA. ' as last_name
               ON last_name.usd_usr_id = usr_id
              AND last_name.usd_usf_id = '. $gProfileFields->getProperty('LAST_NAME', 'usf_id'). '
             LEFT JOIN '. TBL_USER_DATA. ' as first_name
               ON first_name.usd_usr_id = usr_id
              AND first_name.usd_usf_id = '. $gProfileFields->getProperty('FIRST_NAME', 'usf_id'). '
			  LEFT JOIN '. TBL_USER_DATA. ' as city
               ON city.usd_usr_id = usr_id
              AND city.usd_usf_id = '. $gProfileFields->getProperty('CITY', 'usf_id'). '
             LEFT JOIN '. TBL_USER_DATA. ' as email
               ON email.usd_usr_id = usr_id
              AND email.usd_usf_id = '. $gProfileFields->getProperty('EMAIL', 'usf_id'). '
             LEFT JOIN '. TBL_USER_DATA. ' as gender
               ON gender.usd_usr_id = usr_id
              AND gender.usd_usf_id = '. $gProfileFields->getProperty('GENDER', 'usf_id'). '
             LEFT JOIN '. TBL_MEMBERS. '
               ON mem_usr_id = usr_id
              AND mem_begin <= \''.DATE_NOW.'\'
              AND mem_end    > \''.DATE_NOW.'\'
             JOIN '. TBL_ROLES. '
               ON mem_rol_id = rol_id
              AND rol_valid  = 1
             JOIN '. TBL_CATEGORIES. '
               ON rol_cat_id = cat_id
              AND cat_org_id = '. $gCurrentOrganization->getValue('org_id'). '
            WHERE usr_valid = 1
              AND mem_rol_id '.$rol_sql.'
            ORDER BY age '.$sort_sql.',age ,last_name ';
	
//echo $sql; exit();
$result = $gDb->query($sql);
Benutzeravatar
Thomas-RCV
Former team member
Beiträge: 786
Registriert: 1. Aug 2011, 15:06

Re: Ältesten Benutzer und Benutzerin anzeigen

Beitrag von Thomas-RCV »

Ähm,das würde ich da definitiv nicht versuchen abzuändern, denn dann machst du das Plugin ja unbrauchbar :shock:

Da du ja nur einen einzigen Datensatz möchtest, ist eine separate Abfrage die richtige Wahl. Das baust du dann da ein, wo du es brauchst

VG Thomas
suesemausw
Beiträge: 34
Registriert: 5. Apr 2012, 20:56
Wohnort: Steinbach
Kontaktdaten:

Re: Ältesten Benutzer und Benutzerin anzeigen

Beitrag von suesemausw »

Hallo Admidioteam

Wenn ich doch aber das Plugin doppelt einsetze und nur bei dem einen diese Daten abwandle müsste es doch aber gehen???

Ich kenne mich mit SQL Php nicht aus. Daher fällt eine separate abfrage weg!
Benutzeravatar
Thomas-RCV
Former team member
Beiträge: 786
Registriert: 1. Aug 2011, 15:06

Re: Ältesten Benutzer und Benutzerin anzeigen

Beitrag von Thomas-RCV »

Ich schau mir die Tabellen mal an,....
Benutzeravatar
Thomas-RCV
Former team member
Beiträge: 786
Registriert: 1. Aug 2011, 15:06

Re: Ältesten Benutzer und Benutzerin anzeigen

Beitrag von Thomas-RCV »

Du brauchst das Plugin nicht doppelt einsetzen, lass es so wie es ist, denn das SQL Statement ist schon eher komplex.

Bau dir stattdessen diesen kleinen "Patch" da ins Script ein, wo du es haben möchtest.

Code: Alles auswählen

<?php
$sql = 'SELECT DISTINCT
        surname.usd_value as surname, firstname.usd_value as firstname, birthday.usd_value as birthday
        FROM '.TBL_MEMBERS.'
        LEFT JOIN '. TBL_USER_DATA .' surname
        ON surname.usd_usr_id = mem_usr_id
        AND surname.usd_usf_id = '.$gProfileFields->getProperty('LAST_NAME', 'usf_id').'
        LEFT JOIN '. TBL_USER_DATA .' firstname
        ON firstname.usd_usr_id = mem_usr_id
        AND firstname.usd_usf_id = '.$gProfileFields->getProperty('FIRST_NAME', 'usf_id').'
        LEFT JOIN '. TBL_USER_DATA .' birthday
        ON birthday.usd_usr_id = mem_usr_id
        AND birthday.usd_usf_id = '.$gProfileFields->getProperty('BIRTHDAY', 'usf_id').'
        WHERE '.$gProfileFields->getProperty('BIRTHDAY', 'usf_id').' < \''.DATE_NOW.'\'
        AND mem_end > \''.DATE_NOW.'\'
        ORDER BY birthday ASC
        LIMIT 1';

$result = $gDb->query($sql);
$oldestRoleMember = $gDb->fetch_array($result);

/* Datumsobjekt aus dem Ergebnis erstellen */
$birthdayRolemember = new DateTimeExtended($oldestRoleMember['birthday'], 'Y-m-d', 'date');

echo '&Auml;ltestes Mitglied:</br>';
echo $oldestRoleMember['firstname']." ".$oldestRoleMember['surname']." ".'(';
/* Alter berechnen und ausgeben */
echo $birthdayRolemember->getAge();
echo')';
?>

Das kannst du innerhalb von Admidio verwenden, wo du möchtest. Die Ausgabe kannst du ja nach Wünschen abändern,... :wink:

Diese Abfrage holt dir den ältesten aktiven User, der einer Rolle zugeordnet ist. Das muss nicht zwingend ein Mitglied sein, sondern kann auch z.B. eine Webmasterrolle sein, die sonst kein Mitglied ist!

Wenn du das explizit für nur Mitglieder willst, dann musst du nach der "Where" Abfrage noch die Rolle anhand deiner Datenbankstruktur festlegen und folgenden Code erweitern:

Code: Alles auswählen

AND mem_rol_id = 4
Ob 4 der Rolle "Mitglied" entspricht, musst du in deiner Datenbank nachschauen.

VG Thomas
suesemausw
Beiträge: 34
Registriert: 5. Apr 2012, 20:56
Wohnort: Steinbach
Kontaktdaten:

Re: Ältesten Benutzer und Benutzerin anzeigen

Beitrag von suesemausw »

Recht Herzlichen Dank.

Ich werde es mal sofort einbauen. :D :D
suesemausw
Beiträge: 34
Registriert: 5. Apr 2012, 20:56
Wohnort: Steinbach
Kontaktdaten:

Re: Ältesten Benutzer und Benutzerin anzeigen

Beitrag von suesemausw »

Hallo Thomas-RCV

Nochmal vielen Dank für deine Arbeit.

Doch habe ich ein Problem wenn ein User kein Geburtstag eingetragen hat erscheint dieser als Ältester
(2012).

Wie kann ich die Datensätze löschen die keinen Geburtstag eingetragen haben
oder Geburtstage die über 115 Jahre sind nicht anzeigen lasse.
Benutzeravatar
Thomas-RCV
Former team member
Beiträge: 786
Registriert: 1. Aug 2011, 15:06

Re: Ältesten Benutzer und Benutzerin anzeigen

Beitrag von Thomas-RCV »

Das Geburtstagsfeld sollte schon ein Pflichtfeld sein, sonst funktioniert das ja alles logischerweise nicht.
Das Script macht das, was du in deinem Thread wolltest :wink:
Also musst du deine Mitglieder nachpflegen und z.B. ein fiktives Datum einsetzen

Ähmm, über 115 Jahre? Kann ich da mal die Geburtsurkunde sehen? :D

VG Thomas
suesemausw
Beiträge: 34
Registriert: 5. Apr 2012, 20:56
Wohnort: Steinbach
Kontaktdaten:

Re: Ältesten Benutzer und Benutzerin anzeigen

Beitrag von suesemausw »

Ja mit den 115 meinte ich ja das alle ergebnisse die über ein Alter von 115 Jahren (wenn kein Geburtstag eingetragen ist es ja 2012 Jahre) gelöscht werden.
Benutzeravatar
Thomas-RCV
Former team member
Beiträge: 786
Registriert: 1. Aug 2011, 15:06

Re: Ältesten Benutzer und Benutzerin anzeigen

Beitrag von Thomas-RCV »

Code: Alles auswählen

AND birthday.usd_value IS NOT NULL
Hab ich jetzt aber nicht getestet,....
suesemausw
Beiträge: 34
Registriert: 5. Apr 2012, 20:56
Wohnort: Steinbach
Kontaktdaten:

Re: Ältesten Benutzer und Benutzerin anzeigen

Beitrag von suesemausw »

Super jetzt ist das ok

Wie siht das mit dem Limit1 aus wenn ich 3 oder 5 möchte ???
Habe noch versucht Gender mit einzubauen dann kann nach frau oder mann angezeigt werden.
Antworten