Veschachtelte Abfragen und Anzeige
Veschachtelte Abfragen und Anzeige
am 02.03.2005 16:22:45 von Manuel Schmidt
Hallo,
eine kleine Frage zu verschachtelten SQL-Abrfagen.
Ich möchte gern folgendes realisieren:
Paket1
Botschaft1
Botschaft2
Paket2
Botschaft3
....
Dazu habe ich 2 Tabellen, die miteinander verbunden sind.
Ich dachte mir also, bzw. die Ausgabe verschatel, aber ich bekomme das
absolut nicht hin! Hat jemand einen kleinen Rat für mich?
Danke
Re: Veschachtelte Abfragen und Anzeige
am 02.03.2005 21:15:11 von Niels Braczek
Manuel Schmidt schrieb:
> Hallo,
>
> eine kleine Frage zu verschachtelten SQL-Abrfagen.
>
> Ich möchte gern folgendes realisieren:
>
> Paket1
> Botschaft1
> Botschaft2
> Paket2
> Botschaft3
> ....
>
> Dazu habe ich 2 Tabellen, die miteinander verbunden sind.
>
> Ich dachte mir also, bzw. die Ausgabe verschatel, aber ich bekomme das
> absolut nicht hin! Hat jemand einen kleinen Rat für mich?
Ja: Formuliere das einmal so, dass man eine Chance hat zu verstehen, was
du willst. Ich zumindest habe nicht mal eine Idee, was du meinen könntest.
MfG
Niels
Re: Veschachtelte Abfragen und Anzeige
am 03.03.2005 10:34:22 von dev-null-use-reply-adress
Manuel Schmidt schrieb:
> eine kleine Frage zu verschachtelten SQL-Abrfagen.
>
> Ich möchte gern folgendes realisieren:
>
> Paket1
> Botschaft1
> Botschaft2
> Paket2
> Botschaft3
> ....
>
> Dazu habe ich 2 Tabellen, die miteinander verbunden sind.
>
> Ich dachte mir also, bzw. die Ausgabe verschatel, aber ich bekomme das
> absolut nicht hin!
Meine Glaskugel mutmaßt, Du hast die Tabellen pakete und botschaften,
oder so ähnlich, und willst in einer Abfrage alle Pakete holen, diese
in einer Schleife ausgeben und in jeden Durchlauf mit einer weiteren
Abfrage die jeweils passenden Botschaften holen.
Das wäre jedenfalls eine ganze schlechte Idee. Optimiere entweder
Dein DB Design, oder - vielleicht ist es ja schon brauchbar - arbeite
mit einer Abfrage unter Verwendung von JOIN.
> Hat jemand einen kleinen Rat für mich?
Weitere Mutmaßungen stelle ich nicht an. Beschreibe Dein Problem
erstmal genauer. Zeige und insbesondere Dein DB-Design.
1.17. Wie stelle ich meine Frage an die Newsgroup am sinnvollsten?
http://www.php-faq.de/q/q-newsgroup-fragen.html
Gruß, JPM
--
A: Weil es dem natürlichen Lesefluß zuwider läuft.
F: Warum ist das denn so schlimm?
A: Eigener Text oben, Zitat unten.
F: Was nervt bei E-Mail am meisten?
Re: Veschachtelte Abfragen und Anzeige
am 03.03.2005 12:52:09 von Manuel Schmidt
>Meine Glaskugel mutmaßt, Du hast die Tabellen pakete und botschaften,
>oder so ähnlich, und willst in einer Abfrage alle Pakete holen, diese
>in einer Schleife ausgeben und in jeden Durchlauf mit einer weiteren
>Abfrage die jeweils passenden Botschaften holen.
>Das wäre jedenfalls eine ganze schlechte Idee. Optimiere entweder
>Dein DB Design, oder - vielleicht ist es ja schon brauchbar - arbeite
>mit einer Abfrage unter Verwendung von JOIN.
Servus erstmal.
o.k, dann will ich mal tiefer gehen....
DB-Design brauch ich nicht zu überdenken, denn es ist schon korrekt,
dass in einer Tabelle die Botschaften sind und in einer anderen
Tabelle alle Pakete + dem Fremdschlüssel von der Tabelle Botschaften
(Relation zwo Botschaften und Pakete ist 1:n)
Mittels:
$db=mysql_connect("localhost","root"); //Verbindung zum
SQL-Datenbank-Server herstellen
mysql_select_db("ee_db",$db); //Datenbank
Studienplanung auswählen
$result=mysql_query("SELECT * FROM botschaften",$db); //SQL
Abfrage
while ($myrow=mysql_fetch_row($result))
//solange $result Werte hat
{
printf(" ID: %s
", $myrow[0]);
}
?>
kann ich mir schön die Botschaften ausgeben lassen, mittels:
SELECT * FROM botschaften, pakete WHERE botschaften.id =
pakete.botschaftenid
kann ich mir auch die Pakete ausgeben lassen. Dies hat dann die Form:
Botschaften1
Paket1
Botschaften1
Paket2
.....
Und nicht
Botschaften1
Paket1
Paket2
Botschaften2
.....
Deswegen wollte ich verschachteln...... aber wie? Dies hier bringt
einen Fehler in der 2. mysql_fetch_row
$result=mysql_query("SELECT * FROM botschaften",$db);
while ($myrow=mysql_fetch_row($result))
{
printf(" BotschaftenID: %s
", $myrow[0]);
$result2=mysql_query("SELECT * FROM pakete WHERE
botschaften.id = pakete.botschaftenid",$db);
while ($myrow2=mysql_fetch_row($result2))
{
printf(" PaketID: %s
", $myrow2[0]);
}
}
>Weitere Mutmaßungen stelle ich nicht an. Beschreibe Dein Problem
>erstmal genauer. Zeige und insbesondere Dein DB-Design.
>
>1.17. Wie stelle ich meine Frage an die Newsgroup am sinnvollsten?
>http://www.php-faq.de/q/q-newsgroup-fragen.html
>
>
>Gruß, JPM
Re: Veschachtelte Abfragen und Anzeige
am 03.03.2005 13:05:15 von Fabian Schladitz
Manuel Schmidt schrieb:
> Deswegen wollte ich verschachteln...... aber wie? Dies hier bringt
> einen Fehler in der 2. mysql_fetch_row
>
> $result=mysql_query("SELECT * FROM botschaften",$db);
> while ($myrow=mysql_fetch_row($result))
> {
> printf(" BotschaftenID: %s
", $myrow[0]);
> $result2=mysql_query("SELECT * FROM pakete WHERE
> botschaften.id = pakete.botschaftenid",$db);
> while ($myrow2=mysql_fetch_row($result2))
> {
> printf(" PaketID: %s
", $myrow2[0]);
> }
> }
Wie wäre es, wenn du die Fehler abfängst und mal schaust, was dein MySQL
dir so antwortet? Dann würdest du sicher lesen, dass er "botschaften.id"
nicht kennt. Woher auch?
--
HTH,
Fabian
Re: Veschachtelte Abfragen und Anzeige
am 03.03.2005 16:20:23 von Manuel Schmidt
>Wie wäre es, wenn du die Fehler abfängst und mal schaust, was dein MySQL
>dir so antwortet? Dann würdest du sicher lesen, dass er "botschaften.id"
>nicht kennt. Woher auch?
Schreibfehler - geht trotzdem nicht!
SELECT * FROM pakete, botschaften WHERE botschaften.id =
pakete.botschaftenid
Re: Veschachtelte Abfragen und Anzeige
am 03.03.2005 16:24:21 von Fabian Schladitz
Manuel Schmidt schrieb:
>>Wie wäre es, wenn du die Fehler abfängst und mal schaust, was dein MySQL
>>dir so antwortet? Dann würdest du sicher lesen, dass er "botschaften.id"
>>nicht kennt. Woher auch?
>
>
> Schreibfehler - geht trotzdem nicht!
>
> SELECT * FROM pakete, botschaften WHERE botschaften.id =
> pakete.botschaftenid
Soooo... und nun solltest du das ganz schnell wieder weg machen und
etwas wie:
SELECT * FROM pakete WHERE pakete.botschaftenid='.$botschaftenid.'
schreiben. Vorher musst du natürlich $botschaftenid füllen.
Ich hoffe ich habe dir genug vorgekaut. Wenn du deine Fehler abfängst
und hier und da mal die Abfragen ausgeben lässt und überprüfst, dann
kommst du in Zukunft auch allein weiter.
--
HTH,
Fabian