SatansEier Geschrieben 6. Februar 2008 Geschrieben 6. Februar 2008 Hallo zusammen, stellt die Kombination PHP/MYSQL die Möglichkeit bei einer Abfrage, auf ein result(r1) eine neue Abfrage zu machen? DB <-- (abfrage1)--> r1 <--(abrfrage2)--> r2 Gruß S.E. Zitieren
geloescht_JesterDay Geschrieben 6. Februar 2008 Geschrieben 6. Februar 2008 MySQl selbst stellt seit V4.1.x die Möglichkleit von Subselects zur Verfügung. also SELECT Bla from (SELECT * from Blubb) as T1 Das ist aber denke ich nicht das was du willst, und nein, PHP selbst bietet sowas nicht (ich kenne auch keine andere Sprache die das tut, .Net 3.5 soll glaub ich sowas in der Richtung bieten, kenn ich aber nicht genau). Zitieren
SatansEier Geschrieben 6. Februar 2008 Autor Geschrieben 6. Februar 2008 hmpf schade. man könnte r1 als objekt speichern und darauf dann erneut selektieren? Ich denk aber das der Aufwand sich dafür nicht lohnen würde. Möglichweiße bringt eins der großen Frameworks was mit? Ich schau mir mal die mysql-klassen von PEAR und Zend an. Zitieren
Aiun Geschrieben 6. Februar 2008 Geschrieben 6. Februar 2008 bedenke, wenn du eine vollständige SQL-Abfrage in PHP lädst und dann weiter filtern willst, bedeutet das 100% der SQL-Daten in den zwischenspeicher von PHP zu laden, was extrem an ressourcen frisst. Zitieren
SatansEier Geschrieben 6. Februar 2008 Autor Geschrieben 6. Februar 2008 ja ich weiß Auin *gg* hatte ganz kurz sogar daran gedacht r1 in eine Array zu legen und dann mit Array-Funktionen zu arbeiten. Hier die Abfrage: SELECT rv_kunden.ku_id, rv_kunden.ku_kdnr, rv_kunden.ku_name1, rv_kunden.ku_ort, rv_kunden_anspr.ka_id, rv_kunden_anspr.ka_nname FROM rv_kunden JOIN rv_kunden_anspr ON rv_kunden.ku_id = rv_kunden_anspr.ku_id[/PHP] Man stelle sich vor in rv_kunden(t1) stehen Kundenstammdaten, in rv_kunden_anspr(t2) Ansprechpartner die mit dem Kunden über einen Schlüssel verknüpft sind. Das ganze soll in einer Liste (table) dargestellt werden. t1.ku_kdnr | t1.ku_name1 | t1.ku_ort | t2.ka_nname 12345 | Scheinfirma | Stuttgart | (<select>)Mayer, Schmidt, Calypso (</select>) ... nächste Firma Für jede Firma gibt es also eine Zeile in der Liste. ...und irgendwie steh ich grad auf der Leitung. In meiner Abfrage hab ich ja eigentlich alle Daten, ich kann sie atm nur nicht so verarbeiten wie ichs gerne hätte. Zitieren
SatansEier Geschrieben 6. Februar 2008 Autor Geschrieben 6. Februar 2008 Kann ich nicht auf MYSQL-Ebene der "Abfrage" einen Namen geben? (a1) AS wusel; SELECT * FROM wusel; Zitieren
Amstelchen Geschrieben 6. Februar 2008 Geschrieben 6. Februar 2008 Kann ich nicht auf MYSQL-Ebene der "Abfrage" einen Namen geben? z.b. über eine VIEW: MySQL AB :: MySQL 5.1 Referenzhandbuch :: 21.2 CREATE VIEW s'Amstel Zitieren
flashpixx Geschrieben 6. Februar 2008 Geschrieben 6. Februar 2008 Hallo, je nachdem wie Du es handhaben willst, entweder View oder temporäre Tabelle. Aber bei den temporären Sachen ist wichtig, dass sie automatisch gelöscht werden, wenn die Verbindung zur Datenbank beendet wird (evtl persistente Verbindungen verwenden und diese dann auch wieder sauber trennen). Vielleicht hilft es, wenn Du mal postest, wie Du die Daten aus dem Resultset weiter verarbeitet willst. HTH Phil Zitieren
SatansEier Geschrieben 6. Februar 2008 Autor Geschrieben 6. Februar 2008 Amstel, dein Tipp hat mir den Tag gerettet!! :uli Ich nehm mal an das diese erzeugte "VIEW-Table" so lange existiert wie die Verbindung des Clients zur DB besteht? Danach wird sie entfernt? Handelt MySQL das so das jeder Client, wenn nötig, eine eigene VIEW-Table zur Laufzeit bekommt? Edit: Okay, die VIEW-Table muss wohl mit einem eindeutigen Namen deklariert werden!? Zitieren
Reinhold Geschrieben 6. Februar 2008 Geschrieben 6. Februar 2008 j Hier die Abfrage: SELECT rv_kunden.ku_id, rv_kunden.ku_kdnr, rv_kunden.ku_name1, rv_kunden.ku_ort, rv_kunden_anspr.ka_id, rv_kunden_anspr.ka_nname FROM rv_kunden JOIN rv_kunden_anspr ON rv_kunden.ku_id = rv_kunden_anspr.ku_id[/PHP] ... t1.ku_kdnr | t1.ku_name1 | t1.ku_ort | t2.ka_nname 12345 | Scheinfirma | Stuttgart | (<select>)Mayer, Schmidt, Calypso (</select>) ... nächste Firma Moin, wenn ich das richtig sehe, dann hast du doch schon alle Daten beisammen, oder? Es geht also nur um die Ausgabe in HTML ... Wie wäre es mit einer geeigneten Sortierung schon im SQL, also zB "order by rv_kunden.ku_name1, rv_kunden_anspr.ka_nname" und dann ungefähr so (Achtung, wie immer ungetestet): [PHP] $kunde_alt = ""; echo "<TABLE><TR><TD>Deine Überschriften..."; while ( $ds = mysql_fetch_array($rs, MYSQL_BOTH) ) { if ( $ds['ku_name1'] != $kunde_alt ) { $kunde_alt = $ds['ku_name1']; echo "</TD></TR><TR>"; echo "<TD>" . $ds['ku_kdnr'] . "</TD>"; echo "<TD>" . $ds['ku_name1'] . "</TD>"; echo "<TD>" . $ds['ku_ort'] . "</TD>"; echo "<TD>"; } else { echo $ds['ka_nname'] . ", "; } } echo "</TD></TR></TABLE>"; Im Prinzip sollte das reichen. Reinhold Zitieren
Amstelchen Geschrieben 6. Februar 2008 Geschrieben 6. Februar 2008 Ich nehm mal an das diese erzeugte "VIEW-Table" so lange existiert wie die Verbindung des Clients zur DB besteht? Danach wird sie entfernt? nein, darüber hinaus, bis sie geDROPt wird. s'Amstel Zitieren
SatansEier Geschrieben 6. Februar 2008 Autor Geschrieben 6. Februar 2008 Alles klar. Besten Dank! Zitieren
Aiun Geschrieben 7. Februar 2008 Geschrieben 7. Februar 2008 wenn du die Daten für die Anzeige brauchst, "nicht" um nach Ansprechpartnern zu filtern oder zu sortieren, dann mach doch 2 Abfragen draus select kunde foreach kunde { select kontakt echo kunde, echo kontakt } Zitieren
geloescht_JesterDay Geschrieben 7. Februar 2008 Geschrieben 7. Februar 2008 wenn du die Daten für die Anzeige brauchst, "nicht" um nach Ansprechpartnern zu filtern oder zu sortieren, dann mach doch 2 Abfragen draus select kunde foreach kunde { select kontakt echo kunde, echo kontakt } Also auf den ersten Blick würde ich sagen, ein Join ist da besser. SELECT Konde, Kontakt FROM KUNDE JOIN KONTAKT ON (KUNDE.ID = KONTAKT.KUNDE_ID) Und dann: $Kunde = ""; while ($row = mysql_fetch_Bla....) { if ($Kunde != $row["Kunde"]) echo "Kunde: ". $Kunde; echo "Kontakt:" .$row["Kontakt"]; } Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.