SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

Handbuch der Java-Programmierung

Handbuch der Java-Programmierung zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 01.05.2014, 00:53:43
marcuszurhorst marcuszurhorst ist offline
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'] . "&amp;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'] . "&amp;tree=" $row['gedcom'] . "\">" $row['firstname'] . " " $row['lnprefix'] . " " $row['lastname'] . "</a> - <i> &#x271d; " 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)
Mit Zitat antworten
  #2  
Alt 01.05.2014, 08:53:26
pguser pguser ist offline
Junior Member
 
Registriert seit: Apr 2014
Alter: 57
Beiträge: 186
AW: Ergebnisse mehrer SQL-Abfragen kombinieren und neu sortieren?

Zitat:
Zitat von marcuszurhorst Beitrag anzeigen
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.
Mit Zitat antworten
  #3  
Alt 01.05.2014, 13:33:47
marcuszurhorst marcuszurhorst ist offline
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:
  1. 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?
  2. 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
Mit Zitat antworten
  #4  
Alt 01.05.2014, 13:41:32
pguser pguser ist offline
Junior Member
 
Registriert seit: Apr 2014
Alter: 57
Beiträge: 186
AW: Ergebnisse mehrer SQL-Abfragen kombinieren und neu sortieren?

Zitat:
Zitat von marcuszurhorst Beitrag anzeigen
Hallo pguser,

ich habe mir UNION ALL in der Dokumentation durchgelesen, und für mich ist dier Vorschlag nun nicht offensichtlich, weil:
  1. 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?
  2. 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)
Mit Zitat antworten
  #5  
Alt 01.05.2014, 23:49:02
marcuszurhorst marcuszurhorst ist offline
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'] . "&amp;tree=" $dbrow['gedcom'] . "\">" $dbrowh['firstname'] . " " $dbrowh['lnprefix'] . " " $dbrowh['lastname'] . " &#x26AD; " $dbroww['firstname'] . " " $dbroww['lnprefix'] . " " $dbroww['lastname'] . "</a> - <i>" displaydate $dbrow['marrdate'] ) . "</i>" $agostring "<br />\n";


@pguser: ich verstehe deinen Beitrag leider nicht.
Mit Zitat antworten
  #6  
Alt 02.05.2014, 07:24:39
Ckaos Ckaos ist offline
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!
Mit Zitat antworten
  #7  
Alt 05.05.2014, 22:34:38
marcuszurhorst marcuszurhorst ist offline
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
Mit Zitat antworten
  #8  
Alt 06.05.2014, 06:09:12
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
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 Beitrag anzeigen
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.
Mit Zitat antworten
  #9  
Alt 06.05.2014, 09:09:22
Ckaos Ckaos ist offline
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!
Mit Zitat antworten
  #10  
Alt 06.05.2014, 09:38:09
marcuszurhorst marcuszurhorst ist offline
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 Beitrag anzeigen
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
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
If Anweisung mit $_GET[ID] und SQL Abfragen xEi PHP Grundlagen 3 19.06.2013 08:17:15
SQL Ergebnisse zwischenspeichern für sortieren Iceman81 MySQLi/PDO/(MySQL) 3 22.01.2013 07:19:01
Brauche Hilfe Partygirl MySQLi/PDO/(MySQL) 10 01.03.2011 08:18:11
SQL Abfragen optimieren crowl MySQLi/PDO/(MySQL) 1 04.01.2009 10:34:53
ERGEBNISSE mehrerer MySQL-Abfragen kombinieren mischa PHP Grundlagen 1 10.06.2008 02:42:26


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:57:25 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt