Daten aus DB richtig zuordnen wenn zwei Werte stimmen
Hallo liebe Administrator.de Nutzer,
Ich habe eine DB in der zu jedem Tabellenfeld ein eintrag existiert.
mid(X-Koordinate) subid(Y-Koordinate) type(bestimmt die feldeigenschafft) owner(klar besitzer) und map_id ist der primärschlüssel
Jetzt möchte ich zu folgender tabelle den wert aus type nutzen um die td-class zu bestimmen
Type ist eine zahl zwischen 0 und 3. Wie kann ich jetzt also den passenden wert type zuordnen?
Ich habe eine DB in der zu jedem Tabellenfeld ein eintrag existiert.
mid(X-Koordinate) subid(Y-Koordinate) type(bestimmt die feldeigenschafft) owner(klar besitzer) und map_id ist der primärschlüssel
Jetzt möchte ich zu folgender tabelle den wert aus type nutzen um die td-class zu bestimmen
function displayMap(){
try
{
$loadMap = $this->conn->prepare("SELECT * FROM vulgor_tiles ORDER BY subid +0 DESC, mid+0 ASC");
$loadMap->execute();
$map = $loadMap->fetchAll(PDO::FETCH_ASSOC);
}
catch(PDOException $e)
{
echo $e->getMessage();
}
//echo "<pre>";
//print_r($map);
//echo "</pre>";
echo "<table border='1'>";
echo "<tr>";
for($x=1, $xmax=50, $ymax=50, $y=0; $x <= $xmax, $ymax > $y; $x++){
//foreach($map as [$mid."_".$subid] => $type){
echo "<td class='type' >".$x."-".$ymax."</td>";
//}
if($x == 50){
echo "</tr>";
echo "<tr>";
$ymax--;
$x=0;
}
}
}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 366438
Url: https://administrator.de/contentid/366438
Ausgedruckt am: 17.11.2024 um 09:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo TheAlex,
mir ist völlig unklar wie Deine Ausgabe aussehen soll und welchen Zweck sie verfolgt.
In der Ausgabe-Schleife nutzt Du lediglich zwei Zahlvariablen (x und ymax) und lässt auch nur diese ausgeben.
Als class verwendest Du den festen String
Die gesamte Ausgabe hat nichts mit der Datenbank zu tun.
In Deiner auskommentierten for-Schleife
befindet sich zumindest ein Bezug zur Datenbank.
Was soll die von Dir ungenutzte Vartable
Soll es die Verknüpfung von
oder
der Datenbankwert des Feldes
In dieser Unkenntnis habe ich mal was (um)geschrieben, was zumindest irgendetwas ausgibt.
Anmerkung:
Die Max-/Startwerte habe ich in meinem Code reduziert, damit die Ausgabe überschaubar bleibt.
Ob meine Ausgabe etwas mit Deiner Zielsetzung zu tun hat, kann ich allerdings nicht beurteilen.
Dazu könntest Du Dich gerne noch äußern und/oder html-Code posten, der den gewüschten Output demonstriert.
Meine Ausgabe sieht so aus:
Einrückungen
Nachtrag:
Meine Tabelle "vulgor_tiles" enthält nur die beiden Datensätze, die in Deinem Screenshot zu sehen sind.
Mehr Datensätze wären hier eventuell sinnvoll, um zu sehen wohin die Reise gehen soll.
Gruß Frank
mir ist völlig unklar wie Deine Ausgabe aussehen soll und welchen Zweck sie verfolgt.
In der Ausgabe-Schleife nutzt Du lediglich zwei Zahlvariablen (x und ymax) und lässt auch nur diese ausgeben.
Als class verwendest Du den festen String
type
.Die gesamte Ausgabe hat nichts mit der Datenbank zu tun.
In Deiner auskommentierten for-Schleife
foreach($map as [$mid."_".$subid] => $type)
befindet sich zumindest ein Bezug zur Datenbank.
Was soll die von Dir ungenutzte Vartable
$type
aber enthalten?Soll es die Verknüpfung von
$mid."_".$subid
seinoder
der Datenbankwert des Feldes
type
?In dieser Unkenntnis habe ich mal was (um)geschrieben, was zumindest irgendetwas ausgibt.
<?php
function displayMap()
{
$server = "mysql:host=localhost; port=3306; dbname=test";
$benutzer = "root";
$kennwort = "MeinrootKennwort";
$conn = new PDO($server, $benutzer, $kennwort);
$conn -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try
{
$loadMap = $conn -> prepare("SELECT * FROM vulgor_tiles ORDER BY subid +0 DESC, mid +0 ASC");
$loadMap -> execute();
$map = $loadMap -> fetchAll(PDO::FETCH_ASSOC);
}
catch(PDOException $e)
{
echo $e->getMessage();
};
//echo "<pre>";
//print_r($map);
//echo "</pre>";
echo "\t\t<table border='1'>\n";
echo "\t\t\t<tr>\n";
for ($x=1, $xmax=5, $ymax=3, $y=0; $x <= $xmax, $ymax > $y; $x++)
{
foreach ($map as $row)
{
//print_r($row);
$mid = $row["mid"];
$subid = $row["subid"];
/* type ist entweder das hier: */
//$type = $mid."_".$subid;
/* oder doch der Wert aus der Datenbank: */
$type = $row["type"];
//if ($x == $mid && $y == $subid)
if ($x == $mid)
{
echo "\t\t\t\t<td class='$type'>".$x."-".$ymax."</td>\n";
};
}
if($x == $xmax)
{
$ymax--;
$x=0;
echo "\t\t\t</tr>\n";
if ($ymax > 0) {echo "\t\t\t<tr>\n";};
};
};
echo "\t\t</table>\n";
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Test</title>
</head>
<body>
<?php
displayMap();
?>
</body>
</html>
Anmerkung:
Die Max-/Startwerte habe ich in meinem Code reduziert, damit die Ausgabe überschaubar bleibt.
$xmax=5
$ymax=3
Ob meine Ausgabe etwas mit Deiner Zielsetzung zu tun hat, kann ich allerdings nicht beurteilen.
Dazu könntest Du Dich gerne noch äußern und/oder html-Code posten, der den gewüschten Output demonstriert.
Meine Ausgabe sieht so aus:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Test</title>
</head>
<body>
<table border='1'>
<tr>
<td class='0'>1-3</td>
<td class='1'>2-3</td>
</tr>
<tr>
<td class='0'>1-2</td>
<td class='1'>2-2</td>
</tr>
<tr>
<td class='0'>1-1</td>
<td class='1'>2-1</td>
</tr>
</table>
</body>
</html>
Einrückungen
\t
und Zeilenumbrüche \n
sind auch bei generiertem Html kein Luxus, sondern notwendig, um das Ergebnis visuell Prüfen zu können.Nachtrag:
Meine Tabelle "vulgor_tiles" enthält nur die beiden Datensätze, die in Deinem Screenshot zu sehen sind.
Mehr Datensätze wären hier eventuell sinnvoll, um zu sehen wohin die Reise gehen soll.
Gruß Frank
Hallo TheAlex,
...und warum igonorierst Du die einzige Hilfe, die Du bisher erhalten hast?
Hast Du sie gelesen?
Was hat Dir geholfen?
Was war am Thema vorbei?
Was hast Du nicht verstanden?
Warum beantwortest Du keine der Rückfragen?
Sollen wir weiterhin raten wie die erste Reihe in Deiner Ausgabe aussehen soll?
Ich weiß nicht wie ich Dir helfen soll, nicht wobei und nicht wohin, ich bin mir nur recht sicher, dass ich könnte, wenn ich wüsste was Du eigentlich möchtest.
Gruß Frank
...und warum igonorierst Du die einzige Hilfe, die Du bisher erhalten hast?
Hast Du sie gelesen?
Was hat Dir geholfen?
Was war am Thema vorbei?
Was hast Du nicht verstanden?
Warum beantwortest Du keine der Rückfragen?
Sollen wir weiterhin raten wie die erste Reihe in Deiner Ausgabe aussehen soll?
Ich weiß nicht wie ich Dir helfen soll, nicht wobei und nicht wohin, ich bin mir nur recht sicher, dass ich könnte, wenn ich wüsste was Du eigentlich möchtest.
Gruß Frank
Hallo TheAlex,
ich glaube ich weiß jetzt wo die Reise hingehen soll.
Mit diesen Beispieldaten
sieht die Ausgabe so aus
Gruß Frank
ich glaube ich weiß jetzt wo die Reise hingehen soll.
<?php
function displayMap()
{
$server = "mysql:host=localhost; port=3306; dbname=test";
$benutzer = "root";
$kennwort = "MeinrootKennwort";
$conn = new PDO($server, $benutzer, $kennwort);
$conn -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try
{
$loadMap = $conn -> prepare("SELECT * FROM vulgor_tiles ORDER BY subid +0 DESC, mid +0 ASC");
$loadMap -> execute();
$map = $loadMap -> fetchAll(PDO::FETCH_ASSOC);
}
catch(PDOException $e)
{
echo $e->getMessage();
};
echo "\t\t<table class='map'>\n";
echo "\t\t\t<tr>\n";
$xmax = 50;
$ymax = 50;
$y = $ymax;
for($x = 1; $x <= $xmax; $x++)
{
$td_ausgegeben = false;
foreach($map as $key => $v)
{
if($x == $v['mid'] && $y == $v['subid'])
{
echo "\t\t\t\t<td class='type".$v['type']."'>".$x."-".$y."</td>\n";
$td_ausgegeben = true;
};
};
if($x == $xmax)
{
if ($td_ausgegeben)
{
echo "\t\t\t</tr>\n";
echo "\t\t\t<tr>\n";
}
$y--;
$x = 0;
};
if ($y == 0) {break;};
};
echo "\t\t\t</tr>\n";
echo "\t\t</table>\n";
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Test</title>
</head>
<body>
<?php
displayMap();
?>
</body>
</html>
Mit diesen Beispieldaten
map_id mid subid type owner
1 1 2 0 0
2 3 4 1 0
3 5 6 2 0
4 7 9 3 0
5 9 10 3 0
sieht die Ausgabe so aus
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Test</title>
</head>
<body>
<table class='map'>
<tr>
<td class='type3'>9-10</td>
<td class='type3'>7-9</td>
<td class='type2'>5-6</td>
<td class='type1'>3-4</td>
<td class='type0'>1-2</td>
</tr>
</table>
</body>
</html>
Gruß Frank