Datenbankabfrage mit Php
Zack
- datenbank
Hi,
mit viel Googelei und auch Lösungen auch hier aus dem Forum habe ich folgende Sache auf die Reihe bekommen:
$sql = "SELECT *
FROM
akteure a,
anekdoten e
INNER JOIN
quellen z
ON
z.eid = e.eid
INNER JOIN
quellenverzeichnis q
ON
q.qvid = z.qvid
WHERE
a.sid = e.spielerid
Jetzt habe ich folgendes Problem:
Die Struktur soll so aussehen:
ANEKDOTE
QUELLE1
und wenn es mehrere Quellen gibt, dann
ANEKDOTE
QUELLE1, QUELLE2
nur leider bekomme ich die Ausgabe (bei 3 Quellen)...
ANEKDOTE
QUELLE1
ANEKDOTE
QUELLE2
ANEKDOTE
QUELLE3
sprich die Anekdote wird n-Mal angezeigt und n entspricht der Anzahl der Quellen.
Ich bin ein bisschen Stolz auf das Erreichte, aber der letzte Schritt fehlt mir. Vielleicht könnt Ihr mir freundlicherweise helfen.
Danke schön!
Habt Ihr vielleicht nen Ansatz für mich? Ich weiß nicht, wo ich noch anpacken soll.
Hi,
mit viel Googelei und auch Lösungen auch hier aus dem Forum habe ich folgende Sache auf die Reihe bekommen:
$sql = "SELECT *
FROM
akteure a,
anekdoten e
INNER JOIN
quellen z
ON
z.eid = e.eid
INNER JOIN
quellenverzeichnis q
ON
q.qvid = z.qvid
WHERE
a.sid = e.spielerid
>
> Jetzt habe ich folgendes Problem:
>
> Die Struktur soll so aussehen:
>
> ANEKDOTE
> QUELLE1
>
> und wenn es mehrere Quellen gibt, dann
>
> ANEKDOTE
> QUELLE1, QUELLE2
>
> nur leider bekomme ich die Ausgabe (bei 3 Quellen)...
>
> ANEKDOTE
> QUELLE1
>
> ANEKDOTE
> QUELLE2
>
> ANEKDOTE
> QUELLE3
>
> sprich die Anekdote wird n-Mal angezeigt und n entspricht der Anzahl der Quellen.
> Ich bin ein bisschen Stolz auf das Erreichte, aber der letzte Schritt fehlt mir. Vielleicht könnt Ihr mir freundlicherweise helfen.
>
> Danke schön!
>
ANEKDOTE
QUELLE1und wenn es mehrere Quellen gibt, dann
ANEKDOTE
QUELLE1, QUELLE2nur leider bekomme ich die Ausgabe (bei 3 Quellen)...
ANEKDOTE
QUELLE1ANEKDOTE
QUELLE2ANEKDOTE
QUELLE3
Nach meinem Verständis geht das per SQL nicht, da jeder Datensatz für sich ja die angefragten Daten haben muss/soll.
Allgemein sollte man nie * verwenden (außer vllt für einen schnellen Test)
Warum das ganze nicht mit PHP lösen?
Quasi ein assoziatives Array, wobei jedes Element ein Array mit den Quellen ist.
MfG
bubble
Danke, ich frag mal anders :-)...
Ich habe hier eine ähnliche Situation:
$sql = "SELECT *
FROM
akteure a,
zitate e
WHERE
a.sid = e.spielerid
Das klappt ganz schön, aber wieder erscheint der betreffende "Akteur" bei 5 Zitaten 5x. Kann ich den nicht nur 1x aufführen bzw. jeden Akteur nur 1x?
Das klappt ganz schön, aber wieder erscheint der betreffende "Akteur" bei 5 Zitaten 5x. Kann ich den nicht nur 1x aufführen bzw. jeden Akteur nur 1x?
Genau das meinte ich mit "da jeder Datensatz für sich ja die angefragten Daten haben muss/soll", 5 Zitate = 5 Datensätze, jeder Datensatz muss natürlich alle angefragten Daten beinhalten.
SQL ist ja nicht für die Datenverarbeitung in dem Sinne zuständig, sondern du bzw. dein Script/Programm.
MfG
bubble
Danke!
Ich hab das mit den Arrays noch nie gemacht, wenn ich's aber überlese, hört es sich logisch an und im Kopf habe ich ein Bild, wie das funktionieren könnte.
Vielen Dank!
Danke!
Ich hab das mit den Arrays noch nie gemacht, wenn ich's aber überlese, hört es sich logisch an und im Kopf habe ich ein Bild, wie das funktionieren könnte.
Erstellung des Array ist ganz leicht.
Angenommen das Feld mit dem Inhalt "ANEKDOTE" heißt "TYPE" und das Feld für die Quelle heißt "SOURCE"
Zum erstellen:
$data = Array();
while(($line = mysql_fetch_assoc(...)) !== false)
$data[$line["TYPE"]] = $line["SOURCE"];
um durch das Array durchzulaufen:
foreach($data as $type => $srcs)
{
echo "Quellen von $type:";
foreach($srcs as $src)
echo " $src";
echo "<br>";
}
Gibt alles in From von "Quellen von ANEKTDOTE: QUELLE1 QUELLE2<br>" aus.
Ich möcht noch mal daran erinnern, dass man nicht * bei SELECT im SQL benutzen soll (wenn man direkt die Namen der Felder benutzt, bekommt man 1. nur die Daten die man braucht, was das ganze schneller macht, besonders wenn es sich um eine Datenbank auf "weitentfernten" Server handelt, 2. macht das schon eher auf Schreibfehler, etc. aufmerksam)
MfG
bubble
PS: Assoziative Arrays scheinen dir ja nicht so geläufig zu sein, also vllt mal hier noch mal nachlesen ;)
Hallo,
GROUP_CONCAT und GROUP sollten die Stichworte sein, unter denen du im Handbuch deines Datenbanksystems (mysql) nachschlagen solltest.
Ciao, Frank