CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden |
01.05.2014, 00:53:43
|
Anfänger
|
|
Registriert seit: Apr 2014
Ort: Mülheim an der Ruhr
Alter: 45
Beiträge: 12
|
|
Ergebnisse mehrer SQL-Abfragen kombinieren und neu sortieren?
Hallo zusammen!
Ich habe mich hier im Forum angemeldet, da ich mit meinem Latein am Ende bin als Nicht-Programmierer.
Meine bisherigen Kenntnisse beruhen darauf, dass sich PHP einigermaßen "logisch" liest und ich immer nur kleine Anpassungen machte an vorhandenen Skripten.
Jetzt habe ich aber einen Wunsch, an dem ich scheitere ohne weitere Hilfe.
Homepage: www.die-zurhorsts.de (basiert auf WordPress)
Unten auf der Startseite gibt es drei Spalten mit Ausgaben aus einem externen Programm. (Ahnenforschungsdatenbank "TNG"). Diese werden über eine selbst gebaute PHP-Datei nach WordPress geladen.
Die linke Spalte mit den Geburts- und Todestagen interessiert mich. (Jahrestage gibt es auch noch, der Abschnitt ist z.Zt. aber nicht dargestellt).
In der PHP-Datei sind dort unterschiedliche Blöcke drin, die jeweils die MySQL-Datenbank von TNG abfragen nach dem Geburts- bzw. Todestagen der nächsten XYZ Tagen. Wie man sieht, ist die Ausgabe auch aufsteigend sortiert nach Datum.
Block 1: Geburtstage
Block 2: Todestage
Ich würde gerne die Ergebnisse nun "mischen", damit alles in einer Liste steht. Und dieses gemischte Ergebnis soll auch wieder korrekt sortiert sein. Vermutlich ist der einfachere Teil.
Als Krönung des ganzen würde ich aber auch gerne noch merken, welche der Zeilen nun zum Geburtstag bzw. zum Todestag gehört, da ja bei dem Datum hinter dem jeweiligen Namen das Sternchen (für Geburt) bzw. das lateinische Kreuz (für Tod) angezeigt wird.
Nebenbemerkung:
Geburts- und Todestage kommen beide aus der gleichen Tabelle in MySQL und ließen sich ggf. bereits in MySQL sortieren. Aber spätestens wenn noch die Hochzeiten hinzu kommen, dann stammen diese Daten auch noch aus einer ganz anderen Tabelle.
An erster Stelle interessieren mich Tipps zur Logik der Lösung.
Wie wäre das geschickt aufgebaut?
Hier mal die relevanten Code-Teile:
1) SQL-Abfrage für Geburtstage:
PHP-Code:
mysql_query("SET CHARACTER SET 'utf8'");
$query = "SELECT lastname, firstname, lnprefix, birthdatetr, YEAR(birthdatetr) AS BirthYear, birthdate, personID, gedcom, living, birthdatetr + INTERVAL YEAR('" . $datetouse . "') - YEAR( birthdatetr ) + ( (birthdatetr + INTERVAL YEAR('" . $datetouse . "') - YEAR( birthdatetr ) YEAR) < '" . $datetouse . "') YEAR as nextbirthday
FROM $people_table
WHERE DATEDIFF( birthdatetr + INTERVAL YEAR('" . $datetouse . "') - YEAR( birthdatetr ) + ( ( birthdatetr + INTERVAL YEAR('" . $datetouse . "') - YEAR(birthdatetr) YEAR) < '" . $datetouse . "') YEAR, '" . $datetouse . "') <= $futuredays ORDER BY nextbirthday, birthdatetr";
$result = mysql_query($query) or die ($admtext['cannotexecutequery'] . ": $query");
$rowCount = mysql_num_rows($result);
2) SQL-Abfrage für Todestage:
PHP-Code:
mysql_query("SET CHARACTER SET 'utf8'");
$query = "SELECT lastname, firstname, lnprefix, deathdatetr, YEAR(deathdatetr) AS DeathYear, deathdate, personID, gedcom, living, deathdatetr + INTERVAL YEAR('" . $datetouse . "') - YEAR( deathdatetr ) + ( (deathdatetr + INTERVAL YEAR('" . $datetouse . "') - YEAR( deathdatetr ) YEAR) < '" . $datetouse . "') YEAR as nextdeathday
FROM $people_table
WHERE DATEDIFF( deathdatetr + INTERVAL YEAR('" . $datetouse . "') - YEAR( deathdatetr ) + ( ( deathdatetr + INTERVAL YEAR('" . $datetouse . "') - YEAR(deathdatetr) YEAR) < '" . $datetouse . "') YEAR, '" . $datetouse . "') <= $futuredays AND living = 0 ORDER BY nextdeathday, deathdatetr";
$result = mysql_query($query) or die ($admtext['cannotexecutequery'] . ": $query");
$rowCount = mysql_num_rows($result);
3) Ausgabe für Geburtstage:
PHP-Code:
while ($row = mysql_fetch_array($result) ) {
echo "<span class=\"smaller\"><a href=\"/genealogie/getperson.php?personID=" . $row['personID'] . "&tree=" . $row['gedcom'] . "\">" . $row['firstname'] . " " . $row['lnprefix'] . " " . $row['lastname'] . "</a> - <i> *" . displaydate ( $row['birthdate']) . "</i></span>" . $agostring . "<br />\n";
}
4) Ausgabe für Todestage:
PHP-Code:
while ($row = mysql_fetch_array($result) ) {
echo "<a href=\"/genealogie/getperson.php?personID=" . $row['personID'] . "&tree=" . $row['gedcom'] . "\">" . $row['firstname'] . " " . $row['lnprefix'] . " " . $row['lastname'] . "</a> - <i> ✝ " . displaydate ( $row['deathdate']) . "</i>" . $agostring . "<br />";
}
Bei Interesse kann ich gerne die komplette Datei zur Verfügung stellen.
Würde mich freuen, wenn jemand eine gute Idee hat, wie sich das umsetzen ließe.
Vielen Dank!
Grüße,
Marcus (Zurhorst)
|
01.05.2014, 08:53:26
|
Junior Member
|
|
Registriert seit: Apr 2014
Alter: 57
Beiträge: 186
|
|
AW: Ergebnisse mehrer SQL-Abfragen kombinieren und neu sortieren?
Zitat:
Zitat von marcuszurhorst
Bei Interesse kann ich gerne die komplette Datei zur Verfügung stellen.
|
Nein, Du hast hinreichend erklärt, daß Dir UNION ALL als Verknüpfung von SQL-Abfragen unbekannt ist.
|
01.05.2014, 13:33:47
|
Anfänger
|
|
Registriert seit: Apr 2014
Ort: Mülheim an der Ruhr
Alter: 45
Beiträge: 12
|
|
AW: Ergebnisse mehrer SQL-Abfragen kombinieren und neu sortieren?
Hallo pguser,
ich habe mir UNION ALL in der Dokumentation durchgelesen, und für mich ist dier Vorschlag nun nicht offensichtlich, weil: - Im Ergebnis gibt es ein gemeinsames $result aus beiden Abfragen. Welche der Einträge im Array ist aus Query1 und bekommt das Sternchen? - Und welches ist aus der zweiten Abfrage und bekommt das lateinische Kreuz?
- Das UNION ALL scheint gut geeignet zu sein, wenn sich die abgefragten Daten stark ähneln. Aber die Query für Hochzeitstage aus der anderen Tabelle schaut anders aus.
Mein Idee momentan ist:
- Die drei Ergebnisse abspeichern in $result1, $result2 und $result3.
- Anschließend einen Array definieren, wo $result1, result2 und result3 rein kopiert werden, gemeinsam mit einer Markierung, aus welcher Suche das Ergebnis stammt.
- Dann den Array sortieren nach Datum irgendwie
- und dann bei der chronologischen Ausgabe dann für jede Zeile prüfen, welche Markierung dran ist. Mittels case könnte ich dann die jeweils passende Ausgabe machen.
Das scheint mir aufwendig zu sein.
Geht es auch einfacher?
Danke & Gruß,
Marcus
|
01.05.2014, 13:41:32
|
Junior Member
|
|
Registriert seit: Apr 2014
Alter: 57
Beiträge: 186
|
|
AW: Ergebnisse mehrer SQL-Abfragen kombinieren und neu sortieren?
Zitat:
Zitat von marcuszurhorst
Hallo pguser,
ich habe mir UNION ALL in der Dokumentation durchgelesen, und für mich ist dier Vorschlag nun nicht offensichtlich, weil: - Im Ergebnis gibt es ein gemeinsames $result aus beiden Abfragen. Welche der Einträge im Array ist aus Query1 und bekommt das Sternchen? - Und welches ist aus der zweiten Abfrage und bekommt das lateinische Kreuz?
- Das UNION ALL scheint gut geeignet zu sein, wenn sich die abgefragten Daten stark ähneln. Aber die Query für Hochzeitstage aus der anderen Tabelle schaut anders aus.
|
Ich kenne nicht alle Deiner Tabellen.
Zitat:
Mein Idee momentan ist:
- Die drei Ergebnisse abspeichern in $result1, $result2 und $result3.
- Anschließend einen Array definieren, wo $result1, result2 und result3 rein kopiert werden, gemeinsam mit einer Markierung, aus welcher Suche das Ergebnis stammt.
- Dann den Array sortieren nach Datum irgendwie
- und dann bei der chronologischen Ausgabe dann für jede Zeile prüfen, welche Markierung dran ist. Mittels case könnte ich dann die jeweils passende Ausgabe machen.
Das scheint mir aufwendig zu sein.
|
Mir auch.
Code:
test=*# create table t1 (i int);
CREATE TABLE
test=*# create table t2 (i int);
CREATE TABLE
test=*# insert into t1 values (4);
INSERT 0 1
test=*# insert into t2 values (6);
INSERT 0 1
test=*# select '*', i from t1 union all select '+', i from t2;
?column? | i
----------+---
* | 4
+ | 6
(2 rows)
test=*# (select '*' as marker, i from t1) union all (select '+', i from t2);
marker | i
--------+---
* | 4
+ | 6
(2 rows)
test=*# (select '*' as marker, i from t1) union all (select '+', i from t2) order by marker;
marker | i
--------+---
* | 4
+ | 6
(2 rows)
test=*# (select '*' as marker, i from t1) union all (select '+', i from t2) order by marker desc;
marker | i
--------+---
+ | 6
* | 4
(2 rows)
|
01.05.2014, 23:49:02
|
Anfänger
|
|
Registriert seit: Apr 2014
Ort: Mülheim an der Ruhr
Alter: 45
Beiträge: 12
|
|
AW: Ergebnisse mehrer SQL-Abfragen kombinieren und neu sortieren?
Der Vollständigkeit halber hier noch die dritte Datenbank-Abfrage. Wie erwähnt wird diese aus einer anderen Tabelle geholt, und die Ausgabe sieht ebenfalls anders aus. Habe es nun auf der Startseite aktiviert auf www.die-zurhorsts.de
1) SQL-Abfrage für Hochzeitstage:
PHP-Code:
mysql_query("SET CHARACTER SET 'utf8'");
$query = "SELECT husband, wife, marrdatetr, YEAR (marrdatetr) as MarriageYear, marrdate, gedcom, familyID, marrdatetr + INTERVAL YEAR('" . $datetouse . "') - YEAR( marrdatetr ) + ( (marrdatetr + INTERVAL YEAR('" . $datetouse . "') - YEAR( marrdatetr ) YEAR ) < '" . $datetouse . "')YEAR AS nextmarriage
FROM $families_table
WHERE DATEDIFF( marrdatetr + INTERVAL YEAR('" . $datetouse . "') - YEAR( marrdatetr ) + ( (marrdatetr + INTERVAL YEAR('" . $datetouse . "') - YEAR( marrdatetr ) YEAR ) <'" . $datetouse . "') YEAR, '" . $datetouse . "') <= $futuredays AND Living = 0 ORDER BY nextmarriage, marrdatetr";
$result = mysql_query($query) or die ($admtext['cannotexecutequery'] . ": $query");
$rowCount = mysql_num_rows($result);
2) Ausgabe für Hochzeitstage:
PHP-Code:
while( $dbrow = mysql_fetch_assoc( $result ) ) {
echo "<a href=\"/genealogie/familygroup.php?familyID=" . $dbrow['familyID'] . "&tree=" . $dbrow['gedcom'] . "\">" . $dbrowh['firstname'] . " " . $dbrowh['lnprefix'] . " " . $dbrowh['lastname'] . " ⚭ " . $dbroww['firstname'] . " " . $dbroww['lnprefix'] . " " . $dbroww['lastname'] . "</a> - <i>" . displaydate ( $dbrow['marrdate'] ) . "</i>" . $agostring . "<br />\n";
}
@pguser: ich verstehe deinen Beitrag leider nicht.
|
02.05.2014, 07:24:39
|
Member
|
|
Registriert seit: Nov 2007
Beiträge: 843
|
|
AW: Ergebnisse mehrer SQL-Abfragen kombinieren und neu sortieren?
Hi,
Zitat:
@pguser: ich verstehe deinen Beitrag leider nicht
|
Er zeigt dir wie UNION eingesetzt werden kann.
Zitat:
und die Ausgabe sieht ebenfalls anders aus
|
Dann bring sie dazu das sie identisch sind.
Bsp.
Code:
SELECT lastname, firstname, lnprefix, birthdatetr,...
SELECT lastname, firstname, lnprefix, deathdatetr,...
SELECT "*" as preFix,lastname, firstname, lnprefix, actionDate,... FROM GEBURTSTAGE....
UNION ALL
SELECT "+" as preFix,lastname, firstname, lnprefix, actionDate,... FROM TODESTAGE....
Und dann kannst du auch alles sortieren wie du magst und per PHP das Ergebnis unterschiedlich verarbeiten.
MfG
CKaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
|
05.05.2014, 22:34:38
|
Anfänger
|
|
Registriert seit: Apr 2014
Ort: Mülheim an der Ruhr
Alter: 45
Beiträge: 12
|
|
AW: Ergebnisse mehrer SQL-Abfragen kombinieren und neu sortieren?
Ihr überfordert mich leider, und es ärgert mich, das zugeben zu müssen.
Aber ich habe es nun wenigstens hin gekriegt, das Layout der beiden Tabellen "sichtbar zu machen".
http://www.die-zurhorsts.de/genealog...playtables.php
@CKaos: Anhand deines SELECT "*" bzw. SELECT *+" nehme ich an, du unterstellst dass diese Zeichen in einer Spalte in der Datenbank vorliegen. Das tun sie aber nicht! -- Die Tabelle tng_people hat Spalten für Todes- und Sterbedatum. Je nachdem welcher der beiden Daten im Suchzeitraum drin liegt wird dann nur bei der Ausgabe des Ergebnisses ein Sternchen bzw. Kreuz ausgegeben.
Der gleiche Datensatz kann also zu einem anderen Zeitpunkt das andere Zeichen anzeigen.
Reden wir aneinander vorbei? -- Oder verstehe nur ich euch nicht?
Danke & Gruß,
Marcus
|
06.05.2014, 06:09:12
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
|
|
AW: Ergebnisse mehrer SQL-Abfragen kombinieren und neu sortieren?
Zitat:
Zitat von marcuszurhorst
Reden wir aneinander vorbei? -- Oder verstehe nur ich euch nicht?
|
Durchaus möglich. Ua. auch deshalb, weil Du kein CREATE TABLE als Diskussionsgrundlage lieferst. Dem büschen Text entnehme ich zumindest, daß Dein Konzept höchstwahrscheinlich umständlich/ungeeignet/zu wenig durchdacht ist. Datenbankkonzepte entwickelt man nicht mal nebenbei in der Frühstückspause, weil man dabei gemachte Fehler bisweilen nur noch umständlich/zeitaufwendig reparieren kann.
|
06.05.2014, 09:09:22
|
Member
|
|
Registriert seit: Nov 2007
Beiträge: 843
|
|
AW: Ergebnisse mehrer SQL-Abfragen kombinieren und neu sortieren?
Hi
Zitat:
du unterstellst dass diese Zeichen in einer Spalte in der Datenbank vorliegen. Das tun sie aber nicht!
|
Müssen Sie nicht, ich generiere virtuelle Spalten soviele wie ICH will. Und es
muss nicht mal eine Tabelle existieren.
siehe
Code:
SELECT (1+1) as Ergebnis,CURRENT_DATE() as Datum,"Quark" as NochEineSpalte
Keine Tabelle und 3 Ergebnisse ;)
MfG
CKaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
|
06.05.2014, 09:38:09
|
Anfänger
|
|
Registriert seit: Apr 2014
Ort: Mülheim an der Ruhr
Alter: 45
Beiträge: 12
|
|
AW: Ergebnisse mehrer SQL-Abfragen kombinieren und neu sortieren?
Zitat:
Zitat von meikel
Durchaus möglich. Ua. auch deshalb, weil Du kein CREATE TABLE als Diskussionsgrundlage lieferst.
|
Hallo Meikel,
das "CREATE TABLE" schien mir nicht relevant, da ich die Datenbank nicht selbst anlege. Sie existiert bereits und kommt aus einer kommerziellen Ahnenforschungssoftware. Ich werde mal auf die Suche gehen, aber wir reden von 28 MB PHP-Dateien.
Danke & Gruß,
Marcus
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 08:16:27 Uhr.
|