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!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
27.07.2006, 17:38:03
|
Anfänger
|
|
Registriert seit: Jul 2006
Beiträge: 69
|
|
Select mit Where-Clause aus Variable/Array
Hallo, ich versuche für meine HP eine Art online-Stammbaum zu entwickeln.
Die relevanten Daten sind auf 3 Tabellen verteilt und müssen dann für die Ausgabe "zusammengesucht" werden. Das klappt soweit ganz gut, mit ausnahme der Geschwister.
Tabelle st_pers enthält die persönlichen Daten mit einem eindeutigen Identifyer: PERSONID (kurz pid)
Tabelle st_elki enthält in der Spalte ELTERN deren pid und in der Spalte Kinder deren pid
Bei der Abfrage der Daten für die Eltern sichere ich deren pid in dem array $elid.
Dieses Array will ich dann in dem folgendem Select für die Ermittlung deren Kinder benutzen. Leider schein das nicht zu funktionieren.
PHP-Code:
// Eltern
$elid=array();
$i=0;
$sql= "SELECT
*
FROM
ST_PERS
WHERE
PERSONID IN(
SELECT ELTERN FROM ST_ELKI WHERE KINDER=" . "'" . $hp['PERSONID']."')";
$resultel = mysql_query($sql) OR die(mysql_error());
while($el = mysql_fetch_assoc($resultel)) {
print_r($el);
$elid[$i]=$el['PERSONID'];
$i++;
}
print_r($elid);
// Geschwister
$sql= "SELECT
*
FROM
ST_PERS
WHERE
PERSONID IN(
SELECT KINDER FROM ST_ELKI WHERE ELTERN IN(" . "'" . $elid ."') GROUP BY KINDER)";
$resultge = mysql_query($sql) OR die(mysql_error());
while($ge = mysql_fetch_assoc($resultge)) {
print_r($ge);
}
Für kostruktive Vorschläge bin ich dankbar. Thx + Grüße rost
|
28.07.2006, 09:50:07
|
Junior Member
|
|
Registriert seit: Apr 2003
Ort: TÜ
Beiträge: 337
|
|
AW: Select mit Where-Clause aus Variable/Array
Hi,
ohne daß man den Inhalt Deiner Variablen $sql vor Absendung an die Datenbank sieht ist es natürlich schwer, zu sagen, wo der Fehler liegt.
Daher zwei Vermutungen ins Blaue hinein:
1) ... WHERE PERSONID IN(SELECT ELTERN ... klingt so, als ob Du willst, daß ein Zahlenwert ("personenid") identisch ist mit einem Character Wert ("eltern"). Dies kann nicht funktionieren. Hier solltest Du wenn schon denn schon auf "elternid" abfragen. Bitte beachte aber, daß dies nur eine Vermutung aufgrund der Feldnamen ist.
2) Ich vermute mal, daß Du das ganze statt mit einem Subselect (WHERE ... in (SELECT...)) auch mit einem normalen JOIN machen kannst. Sprich etwas in der Art
Code:
SELECT ... FROM st_pers [INNER] JOIN st_elki ON st_pers.personid = st_elki.elternid WHERE st_elki.kinder = ...
Bitte beachte, daß Du je nach möglichen Feldinhalten statt eines INNER JOINs einen LEFT oder RIGHT JOIN nehmen musst. Lies hier die SQL Doku nach.
Ein JOIN ist normalerweise schneller als ein Sub-Select.
HTH,
Andy
|
31.07.2006, 11:37:53
|
Anfänger
|
|
Registriert seit: Jul 2006
Beiträge: 69
|
|
AW: Select mit Where-Clause aus Variable/Array
Danke erstmal für die Antwort.
Zitat:
Zitat von diver-network
1) ... WHERE PERSONID IN(SELECT ELTERN ... klingt so, als ob Du willst, daß ein Zahlenwert ("personenid") identisch ist mit einem Character Wert ("eltern").
|
Nein, wie ich oben schrieb, ist in der Tabelle st_elki die pid abglegt.
Also die PersonID der Eltern in der entsprechenden Spalte und ebenso die der Kinder.
Zitat:
Zitat von diver-network
2) Ich vermute mal, daß Du das ganze statt mit einem Subselect (WHERE ... in (SELECT...)) auch mit einem normalen JOIN machen kannst. Sprich etwas in der Art
Code:
SELECT ... FROM st_pers [INNER] JOIN st_elki ON st_pers.personid = st_elki.elternid WHERE st_elki.kinder = ...
Ein JOIN ist normalerweise schneller als ein Sub-Select.
|
Das ist sicher eine Möglichkeit, nur mit dem Sub-Select funktioniert es schon mal. Wie gesagt, der Teil Eltern funktioniert! Nur der Teil Kinder nicht.
Hier ein "Dump" der Variable $elid:
Code:
Array ( [0] => E01P002 [1] => E01P001
Vielleicht fällt ja noch jemanden was ein.
Eine Alternative wäre wohl zwei getrennte selects für jedes Elternteil zur Ermittlung aller Kinder und damit auch der Geschwister und dann ein Ergebnismerge der Variablen...
|
31.07.2006, 16:22:47
|
|
SELFPHP Guru
|
|
Registriert seit: May 2003
Beiträge: 7.187
|
|
AW: Select mit Where-Clause aus Variable/Array
Lass dir $sql doch mal anzeigen. Dann sollte dir eigentlich schon etwas auffallen.
Geändert von xabbuh (31.07.2006 um 16:22:57 Uhr)
|
31.07.2006, 17:37:51
|
Anfänger
|
|
Registriert seit: Jul 2006
Beiträge: 69
|
|
AW: Select mit Where-Clause aus Variable/Array
Ah, jetzt habe ich es geschnallt...
$sql=
PHP-Code:
SELECT * FROM ST_PERS WHERE PERSONID IN( SELECT KINDER FROM ST_ELKI WHERE ELTERN IN('Array') GROUP BY KINDER)
Heißt das, er sucht nach dem Wort Array in der DB? Das wäre ja blöd.
|
31.07.2006, 18:01:02
|
|
SELFPHP Guru
|
|
Registriert seit: May 2003
Beiträge: 7.187
|
|
AW: Select mit Where-Clause aus Variable/Array
Zitat:
Zitat von RoSt
Heißt das, er sucht nach dem Wort Array in der DB? Das wäre ja blöd.
|
Exakt, du versuchst ein Array im Kontext einer Zeichenkette zu verwenden. Hierbei wird das Array automatisch von PHP in einen String konvertiert.
Vermutlich möchtest du dir erst aus dem Array mit implode() eine Zeichenkette zusammenbauen.
|
01.08.2006, 12:16:45
|
Anfänger
|
|
Registriert seit: Jul 2006
Beiträge: 69
|
|
AW: Select mit Where-Clause aus Variable/Array
So, jetzt habe ich ein bisschen rum probiert.
Den von diver-network angeregte inner join habe ich testweise umgesetzt. Das Ergebnisarray enthält jetzt ein paar Felder mehr, aber die stören ja nicht...
Das Implode der Variable $elid hat nach mehreren erfolglosen Versuchen dann doch noch in der Form
PHP-Code:
implode("','",$elid)
zum Ziel geführt.
Damit kann ich nun alle erforderlichen Daten aus meiner DB fischen. Yipie :)
Muchas Gracias.
Geändert von RoSt (01.08.2006 um 12:21:51 Uhr)
|
01.08.2006, 13:44:02
|
Junior Member
|
|
Registriert seit: Apr 2003
Ort: TÜ
Beiträge: 337
|
|
AW: Select mit Where-Clause aus Variable/Array
Hi,
wenn du zu viele Felder aus Deinem SELECT bekommst musst Du eben genau sagen, welche Felder Du benötigst.
Sprich:
Statt SELECT * FROM ... solltest Du SELECT feld1, feld2,... (sprich die benötigten Felder) FROM ... schreiben.
Achte darauf, daß Du bei Feldern, die bei einem JOIN sowohl in Tabelle 1 als auch in Tabelle 2 gleich heißen diese im SELECT - Teil qualifizieren ("tabelle1.feld1", "tabelle2.feld1") musst.
Sind die Tabellennamen zu lang und Du willst Dir schreibarbeit sparen kannst Du diesen im JOIN einen Alias vergeben ("... FROM tabelle1 AS t1...") und die Felder dann mit dem Alias benamsen ("t1.feld1",...).
Wenn Du andere oder zu viele bzw. unerwartete Werte bekommst solltest Du den SELECT noch mal ansehen, da dann dort vermutlich (einen) Fehler hast.
Gruß,
Andy
HTH,
Andy
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
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 16:19:33 Uhr.
|