Benötige hilfe beim auslesen mehrerer Tables


derdayworker

Grünschnabel
Hallo zusammen.

Ich habe ein Problem mit einem PHP Script, welcher mir bestimmte inhalte aus der Datenbank ausliest, und die Infos mir ausgeben soll.

Damit das einfacher zu verstehen ist, zeige ich euch meine Aufbauten der Datenbank nebst Tables etc.

Code:
::::::::::::: Charaktere :::::::::::::

CREATE TABLE `charakter` (
    `charakterid` INT(10) UNSIGNED NOT NULL,
    `charakter` VARCHAR(255) NOT NULL,
    `alter` VARCHAR(255) NULL DEFAULT NULL,
    `changed` DATETIME NOT NULL,
    PRIMARY KEY (`charakterid`)
)
COLLATE='latin1_swedish_ci'
ENGINE=MyISAM
;

+-------------+-----------+-------+---------------------+
| charakterid | charakter | alter | changed             |
+-------------+-----------+-------+---------------------+
| 1           | Demo      | NULL  | 2019-09-15 10:19:37 |
| 2           | Guenther  | NULL  | 2019-09-15 10:19:37 |
| 3           | Klaus     | NULL  | 2019-09-15 10:19:37 |
| 4           | Dieter    | NULL  | 2019-09-15 10:19:37 |
+-------------+-----------+-------+---------------------+

-------------------------------------------------------------

::::::::::::: rang :::::::::::::

CREATE TABLE `rang` (
    `rangid` INT(10) UNSIGNED NOT NULL,
    `rangname` VARCHAR(255) NOT NULL,
    PRIMARY KEY (`rangid`)
)
COLLATE='latin1_swedish_ci'
ENGINE=MyISAM
;

+--------+-----------+
| rangid | rangname  |
+--------------------+
| 1      | -None-    |
| 2      | Arzt      |
| 3      | Polizei   |
| 4      | Feuerwehr |
+--------+-----------+

-------------------------------------------------------------

::::::::::::: rang_einteilung :::::::::::::

CREATE TABLE `rang_einteilung` (
    `charakterid` INT(10) UNSIGNED NOT NULL,
    `rangid` INT(10) UNSIGNED NOT NULL,
    PRIMARY KEY (`charakterid`, `rangid`)
)
COLLATE='latin1_swedish_ci'
ENGINE=MyISAM
;

+-------------+--------+
| charakterid | rangid |
+-------------+--------+
| 1           |  1     |
| 2           |  2     |
| 3           |  3     |
| 3           |  4     |
+-------------+--------+

-------------------------------------------------------------
Zur Erkärung.

Charaktere: Ich habe einen Table, indem ich alle Namen der Charaktere Sammle, das wird stufenweise mit weiteren inhalten bestückt.

Rang: Hier sind die Ränge aufgelistet die es später für die " Einteilung " zu verleihen gillt.

Rang_Einteilung: Hier sollen die Namen der Charaktere entsprechend eines der Ränge zugeteilt werden.
Der Clou hierbei ist, das ein Charakter mehrere ränge haben kann.

------------

Jetzt zum eigentlichen Problem:

Ich habe einen SQL Befehl, womit ich in meiner mysql datenbank über das programm heidisql eine Abfrage starten kann, wo ich zwar das richtige Ergebnis angezeigt bekomme, aber ich bekomme das mittels PHP nicht abgefragt.

In SQL sieht das so aus:

SQL:
select charakter, rangname from charakter, rang, rang_einteilung
where
charakter.charakterid = rang_einteilung.charakterid AND
rang.rangid = rang_einteilung.rangid AND
charakter.charakterid = 3
Bei dem Beispiel kommt so wie es soll raus, das Klaus sowohl Polizist als auch Feuerwehr als Rang eingeteilt bekommen hat.

Wenn ich jedoch PHP zuhilfe ziehen möchte, dann bekomme ich keine Infos ausgelesen, es steht nur die Tabellen Bezeichnung damit ich erkennen kann was er auslesen tut.

Es kommt kein Error.

Der PHP-Code sieht so aus:

PHP:
<?php
require_once ('db1.php');
$db_link = mysqli_connect (
                     MYSQL_HOST,
                     MYSQL_BENUTZER,
                     MYSQL_KENNWORT,
                     MYSQL_DATENBANK
                    );

$sql = "select charakter, rangname from charakter, rang, rang_einteilung where charakter.charakterid = rang_einteilung.charakterid
AND rang.rangid = rang_einteilung.rangid AND charakter.charakterid = 3";

$db_erg = mysqli_query( $db_link, $sql );
if ( ! $db_erg )
{
  die('Ungültige Abfrage: ' . mysqli_error());
}

echo '<table border="1">';
echo "<tr>";
echo "<td><div style='text-align:center;'>name</div></td>";
echo "<td><div style='text-align:center;'>rangname</div></td>";
echo "</tr>";

#echo '<table border="1">';
while ($zeile = mysqli_fetch_array( $db_erg, MYSQL_ASSOC))
{
  echo "<tr>";
  echo "<td>". $zeile['charakter'] . "</td>";
  echo "<td>". $zeile['rangname'] . "</td>";
  echo "</tr>";
}
echo "</table>";
mysqli_free_result( $db_erg );
?>
Wer kann mir sagen, wo da der fehler ist ?

Schonmal vielen lieben dank im vorraus.
 

nchristoph

Erfahrenes Mitglied
Versuchs mal mit SELECT ,FROM und WHERE grossgeschrieben.
Ausserdem musst du bei msqli_error die Verbindung mit übergeben.
Entferne auch das MYSQL_ASSOC dann hats bei mir mit deiner DB gleich funktioniert.

Kleiner Tip noch: Mach die Charid im Charakter Table Auto Increment. Ausser du willst jedes mal die Max Id auslesen, +1 und wieder schreiben.
 
Zuletzt bearbeitet:

Neue Beiträge