hallo,
... ich weis nicht ob das hier ein php oder sql problem ist dementsprechend auch nicht ob ich damit hier oder im sql forum besser aufgehoben bin, aber eines ist definitiv klar: ich komme nicht mehr ohne hilfe weiter..
folgendes: ich versuche mit einer abfrage daten aus 3-4 verknüpften tabellen auszugeben. dies gelingt auch, alle notwendigen daten sind vorhanden.
ich erzeuge mit einer while schleife folgende ausgabe:
erstes buch: autor 1 Kategorie: 5
erstes buch: autor 1 Kategorie: 1
erstes buch: autor 1 Kategorie: 2
zweites buch: autor 1 / autor 3 Kategorie: 1
drittes buch: autor 2 Kategorie: 3
viertes buch: autor 2 / autor 3 Kategorie: 1
viertes buch: autor 2 / autor 3 Kategorie: 4
fünftes buch: autor 1 / autor 2 / autor 3 Kategorie: 2
sechtes buch: autor 2 Kategorie: 1
dies enstpricht zwar der wahrheit, nicht aber der absolut notwendigen formatierung:
erstes buch: autor 1 Kategorie: 5 / 1 / 2
zweites buch: autor 1 / autor 3 Kategorie: 1
drittes buch: autor 2 Kategorie: 3
viertes buch: autor 2 / autor 3 Kategorie: 1 / 4
fünftes buch: autor 1 / autor 2 / autor 3 Kategorie: 2
sechtes buch: autor 2 Kategorie: 1
... der code funktioniert für 1 buch -> mehrere autoren optimal (ohne Kategorien),
sobald ich jedoch die tabelle 'katalog_buch_kat' mit einbeziehe erscheint obengenannte formatierung. nachfolgend der letzte codeschnipsel mit dieser nicht gewünschten ausgabe.
ich hoffe jemand hat einen rat für mich, sitze seit einigen tagen immer wieder an dieser geschichte mit den unterschiedlichsten ergebnissen.
ich möchte doch nur 1 buch mit mehreren autoren und verschiedenen kategorien in einer reihe darstellen...
und hier die db struktur falls es ein sql problem ist, wovon ich irgendwie aber nicht ausgehe (while):
... ich weis nicht ob das hier ein php oder sql problem ist dementsprechend auch nicht ob ich damit hier oder im sql forum besser aufgehoben bin, aber eines ist definitiv klar: ich komme nicht mehr ohne hilfe weiter..
folgendes: ich versuche mit einer abfrage daten aus 3-4 verknüpften tabellen auszugeben. dies gelingt auch, alle notwendigen daten sind vorhanden.
ich erzeuge mit einer while schleife folgende ausgabe:
erstes buch: autor 1 Kategorie: 5
erstes buch: autor 1 Kategorie: 1
erstes buch: autor 1 Kategorie: 2
zweites buch: autor 1 / autor 3 Kategorie: 1
drittes buch: autor 2 Kategorie: 3
viertes buch: autor 2 / autor 3 Kategorie: 1
viertes buch: autor 2 / autor 3 Kategorie: 4
fünftes buch: autor 1 / autor 2 / autor 3 Kategorie: 2
sechtes buch: autor 2 Kategorie: 1
dies enstpricht zwar der wahrheit, nicht aber der absolut notwendigen formatierung:
erstes buch: autor 1 Kategorie: 5 / 1 / 2
zweites buch: autor 1 / autor 3 Kategorie: 1
drittes buch: autor 2 Kategorie: 3
viertes buch: autor 2 / autor 3 Kategorie: 1 / 4
fünftes buch: autor 1 / autor 2 / autor 3 Kategorie: 2
sechtes buch: autor 2 Kategorie: 1
... der code funktioniert für 1 buch -> mehrere autoren optimal (ohne Kategorien),
sobald ich jedoch die tabelle 'katalog_buch_kat' mit einbeziehe erscheint obengenannte formatierung. nachfolgend der letzte codeschnipsel mit dieser nicht gewünschten ausgabe.
ich hoffe jemand hat einen rat für mich, sitze seit einigen tagen immer wieder an dieser geschichte mit den unterschiedlichsten ergebnissen.
ich möchte doch nur 1 buch mit mehreren autoren und verschiedenen kategorien in einer reihe darstellen...
PHP-Code:
<?php
/// Datenbank Server (Host)
$server = "localhost";
/// Benutzer (admin)
$benutzer = "";
/// Passwort (admin)
$kennwort = "";
/// Datenbank (MySQL)
$datenbank = "autoren";
/// Verbindung zum MySQL Server
$verbindung = mysql_connect($server,$benutzer,$kennwort) or die (mysql_error());
/// Auswählen der Datenbank
mysql_select_db($datenbank,$verbindung) or die (mysql_error());
/// SQL QUERY
$sql = "SELECT A.autor_id ,
A.name ,
B.buch_id ,
B.titel ,
D.kat_id
FROM
katalog_autor A ,
katalog_buch B ,
katalog_buch_autor C ,
katalog_buch_kat D
WHERE
C.autor_id = A.autor_id
AND C.buch_id = B.buch_id
AND D.buch_id = B.buch_id
ORDER BY B.buch_id";
/// Datenbankabfrage
$result = mysql_query($sql) or die (mysql_error());
?>
<table width="500">
<? $i = 0; while($row = mysql_fetch_array($result)) {
/// Array durchlaufen
$weiter = false;
for ($x = 0; $x<$i; $x++) {
// nachsehen ob das buch mehrere autoren besitzt, dementsprechend " / " trennzeichen zwischen autor
if ($daten[$x]['buch_id'] == $row['buch_id'] && $daten[$x]['kat_id'] == $row['kat_id']) { // ????
$daten[$x]['name'] .= " / ".$row['name']; // Trennzeichen " / "
$daten[$x]['kat_id'] = $row['kat_id'];
$weiter = true;
break;
}
}
if ($weiter == false) {
$daten[$i]['titel'] = $row['titel'];
$daten[$i]['name'] = $row['name'];
$daten[$i]['buch_id'] = $row['buch_id'];
$daten[$i]['kat_id'] = $row['kat_id'];
$i++;
}
}
for ($z=0;$z<$i;$z++) {
$titel = $daten[$z]['titel'];
$name = $daten[$z]['name'];
$kat = $daten[$z]['kat_id'];
?>
<tr>
<td><? echo $titel; ?>:</td>
<td><? echo $name; ?></td>
<td>Kategorie: <? echo $kat; ?></td>
</tr>
<? } ?>
</table>
PHP-Code:
#
# Tabellenstruktur für Tabelle `katalog_autor`
#
CREATE TABLE katalog_autor (
autor_id int(10) NOT NULL auto_increment,
name varchar(30) NOT NULL default '',
PRIMARY KEY (autor_id)
) TYPE=MyISAM;
#
# Daten für Tabelle `katalog_autor`
#
INSERT INTO katalog_autor VALUES (1, 'autor 1');
INSERT INTO katalog_autor VALUES (2, 'autor 2');
INSERT INTO katalog_autor VALUES (3, 'autor 3');
# --------------------------------------------------------
#
# Tabellenstruktur für Tabelle `katalog_buch`
#
CREATE TABLE katalog_buch (
buch_id int(10) NOT NULL auto_increment,
titel varchar(50) NOT NULL default '',
PRIMARY KEY (buch_id)
) TYPE=MyISAM;
#
# Daten für Tabelle `katalog_buch`
#
INSERT INTO katalog_buch VALUES (1, 'erstes buch');
INSERT INTO katalog_buch VALUES (2, 'zweites buch');
INSERT INTO katalog_buch VALUES (3, 'drittes buch');
INSERT INTO katalog_buch VALUES (4, 'viertes buch');
INSERT INTO katalog_buch VALUES (5, 'fünftes buch');
INSERT INTO katalog_buch VALUES (6, 'sechtes buch');
# --------------------------------------------------------
#
# Tabellenstruktur für Tabelle `katalog_buch_autor`
#
CREATE TABLE katalog_buch_autor (
buch_id int(10) NOT NULL default '0',
autor_id int(10) NOT NULL default '0',
UNIQUE KEY buch_autor (buch_id,autor_id),
KEY buch (buch_id),
KEY autor (autor_id)
) TYPE=MyISAM;
#
# Daten für Tabelle `katalog_buch_autor`
#
INSERT INTO katalog_buch_autor VALUES (1, 1);
INSERT INTO katalog_buch_autor VALUES (2, 1);
INSERT INTO katalog_buch_autor VALUES (2, 3);
INSERT INTO katalog_buch_autor VALUES (3, 2);
INSERT INTO katalog_buch_autor VALUES (4, 2);
INSERT INTO katalog_buch_autor VALUES (4, 3);
INSERT INTO katalog_buch_autor VALUES (5, 1);
INSERT INTO katalog_buch_autor VALUES (5, 2);
INSERT INTO katalog_buch_autor VALUES (5, 3);
INSERT INTO katalog_buch_autor VALUES (6, 2);
# --------------------------------------------------------
#
# Tabellenstruktur für Tabelle `katalog_buch_kat`
#
CREATE TABLE katalog_buch_kat (
kat_id int(10) NOT NULL default '0',
buch_id int(10) NOT NULL default '0',
KEY buch (buch_id),
KEY autor (kat_id)
) TYPE=MyISAM;
#
# Daten für Tabelle `katalog_buch_kat`
#
INSERT INTO katalog_buch_kat VALUES (1, 1);
INSERT INTO katalog_buch_kat VALUES (2, 1);
INSERT INTO katalog_buch_kat VALUES (1, 2);
INSERT INTO katalog_buch_kat VALUES (3, 3);
INSERT INTO katalog_buch_kat VALUES (5, 1);
INSERT INTO katalog_buch_kat VALUES (4, 4);
INSERT INTO katalog_buch_kat VALUES (1, 4);
INSERT INTO katalog_buch_kat VALUES (2, 5);
INSERT INTO katalog_buch_kat VALUES (1, 6);
Kommentar