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 ::

Fortgeschrittene CSS-Techniken

Fortgeschrittene CSS-Techniken 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 > MySQLi/PDO/(MySQL)

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 27.07.2006, 17:38:03
RoSt RoSt ist offline
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
Mit Zitat antworten
  #2  
Alt 28.07.2006, 09:50:07
diver-network diver-network ist offline
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
__________________
Delphine, Wale, Orcas und mee(h)r:
tauchen in Alor/Indonesien
http://www.alor-dive.com
Mit Zitat antworten
  #3  
Alt 31.07.2006, 11:37:53
RoSt RoSt ist offline
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...
Mit Zitat antworten
  #4  
Alt 31.07.2006, 16:22:47
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
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)
Mit Zitat antworten
  #5  
Alt 31.07.2006, 17:37:51
RoSt RoSt ist offline
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 INSELECT 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.
Mit Zitat antworten
  #6  
Alt 31.07.2006, 18:01:02
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
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.
Mit Zitat antworten
  #7  
Alt 01.08.2006, 12:16:45
RoSt RoSt ist offline
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)
Mit Zitat antworten
  #8  
Alt 01.08.2006, 13:44:02
diver-network diver-network ist offline
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
__________________
Delphine, Wale, Orcas und mee(h)r:
tauchen in Alor/Indonesien
http://www.alor-dive.com
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
Unknown column 'mitarbeiternr' in 'where clause' Notting PHP Grundlagen 5 30.04.2006 22:27:51
SELECT mit einfacher WHERE Bedingung ausgeben Darius_2005 PHP Grundlagen 4 20.12.2005 15:10:41
Das soll nach 1 h ausgeführt werden! Spike15 PHP Grundlagen 12 04.04.2005 17:29:57
SELECT * FROM where and or kuenzli MySQLi/PDO/(MySQL) 2 21.11.2003 14:04:11
Unknown Column 'Schamane' in 'where clause' Drosi PHP für Fortgeschrittene und Experten 2 16.06.2003 08:21:09


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:42:11 Uhr.


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


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