| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

16-11-2010, 16:22
|
|
d_dub
Registrierter Benutzer
|
|
Registriert seit: Nov 2010
Beiträge: 5
|
|
Hilfe / Tipps bei Klassenerstellung
Hallo Zusammen,
Vorweg:
ich bin noch noch nicht allzulange dabei mich mit PHP zu beschäftigen :-)
Ich habe hier ein etwa 10 Jahre altes Projekt, dass ich "restaurieren" will.
Dabei geht es um einen Ahnenausgabe für Hunde.
Bislang läuft das, soweit ich beurteilen kann, ganz gut.
Zur eigentlichen Frage:
gibt es eine Möglichkeit /macht es Sinn die folgenden Abfragen in eine Klasse zu "stecken"?
Weiterhin wäre es toll, wenn man die Variablen automatisch erzeugen könnte, mit Hilfe einer Schleife sozusagen.
Das wäre insofern Hilfreich, weil die Ausgabe nicht nur auf 32 Tiere beschränkt sein soll.
Sicherlich ist es kein Problem die List "händisch" fortzusetzten, aber schön ist das nicht :-)
PHP-Code:
$var = mysql_fetch_array(mysql_query("select * from TAB01 where id='$id'")); $var1 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var[ver_v]' && znr='$var[znr_v]'")); $var2 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var[ver_m]' && znr='$var[znr_m]'")); $var3 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var1[ver_v]' && znr='$var1[znr_v]'")); $var4 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var1[ver_m]' && znr='$var1[znr_m]'")); $var5 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var2[ver_v]' && znr='$var2[znr_v]'")); $var6 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var2[ver_m]' && znr='$var2[znr_m]'")); $var7 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var3[ver_v]' && znr='$var3[znr_v]'")); $var8 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var3[ver_m]' && znr='$var3[znr_m]'")); $var9 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var4[ver_v]' && znr='$var4[znr_v]'")); $var10 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var4[ver_m]' && znr='$var4[znr_m]'")); $var11 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var5[ver_v]' && znr='$var5[znr_v]'")); $var12 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var5[ver_m]' && znr='$var5[znr_m]'")); $var13 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var6[ver_v]' && znr='$var6[znr_v]'")); $var14 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var6[ver_m]' && znr='$var6[znr_m]'")); $var15 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var7[ver_v]' && znr='$var7[znr_v]'")); $var16 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var7[ver_m]' && znr='$var7[znr_m]'")); $var17 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var8[ver_v]' && znr='$var8[znr_v]'")); $var18 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var8[ver_m]' && znr='$var8[znr_m]'")); $var19 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var9[ver_v]' && znr='$var9[znr_v]'")); $var20 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var9[ver_m]' && znr='$var9[znr_m]'")); $var21 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var10[ver_v]' && znr='$var10[znr_v]'")); $var22 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var10[ver_m]' && znr='$var10[znr_m]'")); $var23 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var11[ver_v]' && znr='$var11[znr_v]'")); $var24 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var11[ver_m]' && znr='$var11[znr_m]'")); $var25 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var12[ver_v]' && znr='$var12[znr_v]'")); $var26 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var12[ver_m]' && znr='$var12[znr_m]'")); $var27 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var13[ver_v]' && znr='$var13[znr_v]'")); $var28 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var13[ver_m]' && znr='$var13[znr_m]'")); $var29 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var14[ver_v]' && znr='$var14[znr_v]'")); $var30 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var14[ver_m]' && znr='$var14[znr_m]'")); $var31 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var14[ver_m]' && znr='$var14[znr_m]'"));
Würde mich über ein paar Tipps und Anregungen freuen :-)
|

16-11-2010, 16:25
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Das "macht" so wie's da steht schon keinen Sinn.
Beschäftige dich zuerst mit vernünftiger Datenbank-Modelierung, insb. dem Stichwort Normalisierung.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

20-11-2010, 11:14
|
|
d_dub
Registrierter Benutzer
|
|
Registriert seit: Nov 2010
Beiträge: 5
|
|
Selbstverständlich hast du Recht.
Nur ist mir diese Datenbank nur zur Verfügung gestellt. Löschen oder ändern sollte ich sie nicht :-)
Vlt. kannst du ja mal von der Datenbank absehen.
Also, was genau soll jetzt passieren?
Diese Abfrage liefert den Hund, dessen Ahnen wir uns ansehen wollen.
PHP-Code:
$var = mysql_fetch_array(mysql_query("select * from TAB01 where id='$id'"));
Um jetzt zu ermitteln wer die Eltern des Hundes sind werden diese Abfragen benötigt:
Vater (_v steht für Vater bzw _m für Mutter)
PHP-Code:
$var1 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var[ver_v]' && znr='$var[znr_v]'"));
und Mutter
PHP-Code:
$var2 = mysql_fetch_array(mysql_query("select * from TAB01 where verein='$var[ver_m]' && znr='$var[znr_m]'"));
Und so weiter.
Der zuerst gepostete Code zeigt 4 Generationen an. Möchte ich jetzt aber zB 10 Generationen angezeigt bekommen, so müsste ich 1024 Variablen erstellen - nicht so schön :-)
Ich vermute mal, dass ich auch mit Arrays nicht wirklich weiter komme, weil zu viele Datensätze ausgegeben werden müssen bzw. eingelesen werden.
|

20-11-2010, 11:17
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Du suchst einen LEFT bzw. INNER JOIN.
|

20-11-2010, 11:37
|
|
d_dub
Registrierter Benutzer
|
|
Registriert seit: Nov 2010
Beiträge: 5
|
|
Ich hatte mich schonmal an einem LEFT JOIN versucht, allerdings weiß ich nicht, wie ich da sagen kann :"zeige 4,5,6, usw Generationen an".
|

20-11-2010, 11:40
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
In dem du die Joins in einer Schleife zusammen stoppelst ...
|

20-11-2010, 12:02
|
|
d_dub
Registrierter Benutzer
|
|
Registriert seit: Nov 2010
Beiträge: 5
|
|
hm...
könnte ich dafür vlt. ein kleines Beispiel bekommen?
|

20-11-2010, 12:23
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.188
|
|
am besten realisierst du mal den JOIN über 3 Generationen. Daran kannst du ziemlich gut sehen, welche teile in SELECT und JOIN sich immer wiederholen. Daran solltest du die schleife ableiten können.
Wenn das nicht klappt, poste deine Versuche hier.
|

20-11-2010, 15:37
|
|
d_dub
Registrierter Benutzer
|
|
Registriert seit: Nov 2010
Beiträge: 5
|
|
Den INNER JOIN habe ich soweit fertig (beispielhaft über 3 Gen und mit Hund ID 35). Test mit phpmyadmin funktionierte auch.
PHP-Code:
$sql = "SELECT hund0.id, hund0.hunderasse, hund0.name, hund0.zwingername, hund0.verein, hund0.zbnr, hund1.id, hund1.hunderasse, hund1.name, hund1.zwingername, hund1.verein, hund1.zbnr, hund2.id, hund2.hunderasse, hund2.name, hund2.verein, hund2.zwingername, hund2.zbnr, hund3.id, hund3.hunderasse, hund3.name, hund3.zwingername, hund3.verein, hund3.zbnr, hund4.id, hund4.hunderasse, hund4.zwingername, hund4.name, hund4.verein, hund4.zbnr, hund5.id, hund5.hunderasse, hund5.name, hund5.zwingername, hund5.verein, hund5.zbnr, hund6.id, hund6.hunderasse, hund6.name, hund6.zwingername, hund6.verein, hund6.zbnr, hund7.id, hund7.hunderasse, hund7.name, hund7.zwingername, hund7.verein, hund7.zbnr, hund8.id, hund8.hunderasse, hund8.name, hund8.zwingername, hund8.zbnr, hund8.verein, hund9.id, hund9.hunderasse, hund9.name, hund9.zwingername, hund9.verein, hund9.zbnr, hund10.id, hund10.hunderasse, hund10.name, hund10.zwingername, hund10.verein, hund10.zbnr FROM df_ahnen hund0 INNER JOIN df_ahnen hund1 ON (hund0.verein_v = hund1.verein) AND (hund0.zbnr_v = hund1.zbnr) INNER JOIN df_ahnen hund2 ON (hund0.verein_m = hund2.verein) AND (hund0.zbnr_m = hund2.zbnr) INNER JOIN df_ahnen hund3 ON (hund1.verein_v = hund3.verein) AND (hund1.zbnr_v = hund3.zbnr) INNER JOIN df_ahnen hund4 ON (hund1.verein_m = hund4.verein) AND (hund1.zbnr_m = hund4.zbnr) INNER JOIN df_ahnen hund5 ON (hund2.verein_v = hund5.verein) AND (hund2.zbnr_v = hund5.zbnr) INNER JOIN df_ahnen hund6 ON (hund2.verein_m = hund6.verein) AND (hund2.zbnr_m = hund6.zbnr) INNER JOIN df_ahnen hund7 ON (hund3.verein_v = hund7.verein) AND (hund3.zbnr_v = hund7.zbnr) INNER JOIN df_ahnen hund8 ON (hund3.verein_m = hund8.verein) AND (hund3.zbnr_m = hund8.zbnr) INNER JOIN df_ahnen hund9 ON (hund4.verein_v = hund9.verein) AND (hund4.zbnr_v = hund9.zbnr) INNER JOIN df_ahnen hund10 ON (hund4.verein_m = hund10.verein) AND (hund4.zbnr_m = hund10.zbnr) WHERE hund0.id = 35";
Nur bekomme ich ich das nicht in eine Schleife bzw. vielmehr nicht in die Abfrage
Mein Ansatz sah wie folgt aus:
PHP-Code:
for ($i=0; $i<63; $i++) { $hund = 'hund'.$i; for ($j=1; $j<63; $j++) { $abf_ahnen = "SELECT '$hund'.id '$hund'.name '$hund'.zwingername '$hund'.verein '$hund'.zbnr FROM df_ahnen '$hund' INNER JOIN df_ahnen '$hund' ON ('$hund'.verein_v = '$hund.$j'.verein) AND ('$hund'.zbnr_v = '$hund.$j'.zbnr) WHERE hund0.id = 35"; $result = mysql_query($abf_ahnen); while($ahnen = mysql_fetch_array($result)){ } } }
Ich denke mal, dass die Variablen völlig falsch in die Abfrage eingefügt sind.
|

20-11-2010, 15:53
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
In der Schleife sollst du nur den SQL-String zusammen bauen. mysql_query() folgt nach der Schleife.
|

20-11-2010, 15:55
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.188
|
|
Ich dachte du wolltes/solltest die query mittels der schleife aufbauen? Dann wärst du jetzt schon im ansatz falsch.
Willst du ALLES in einer Query abfragen, oder nur jeweils einen Hund und seine Eltern?
|

20-11-2010, 16:04
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Ich würde das mit Nested Sets lösen. Wenn das nicht geht, weil das DB-Schema nicht geändert werden kann, dann würde ich die vielen Abfragen aus dem ersten Beitrag dieses Themas einfach in einer Schleife abfackeln.
PHP-Code:
$vars = array(0 => mysql_fetch_array(mysql_query("select * from TAB01 where id='$id'"))); for ($i = 1; $i < $limit; $i++) { $vars[$i] = mysql_fetch_array(mysql_query("select * from TAB01 where verein='".$vars[$i-1]['ver_v']."' && znr='".$vars[$i-1]['znr_v']."'")); } print_r($vars);
So hast du zwar deutlich mehr Last auf dem DB-Server und dein Script ist nicht so flott wie es sein könnte, aber ich wette, dass es für dein Projekt allemal ausreicht.
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
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.
|
|
|
|
PHP News
|