Ich habe derzeit 2 Tabellen keine Beziehungen zwischen den beiden etabliert. Ich möchte nur die Daten aus der 2. Tabelle an das Ende der 1. Tabelle in der JSON-Ausgabe anhängen.Wie verbinden Sie die Daten aus 2 Tabellen ohne Beziehungen in PHP?
1. Tabelle:
map_type map_value
-----------------------------
image_link www.google.com
top_lat 32.91
right_long -117.13
zoom_level 17.5
2. Tabelle:
marker_name marker_lat marker_long
------------------------------------------
Food 32.91 -117.14
Party 31.22 -119.20
Chips 29.02 -120.00
ich die grundlegende Abfrage verstehen 2 Tabellen zu verknüpfen, und umgesetzt mit dem folgenden Code:
$sql = "select * from second_table join first_table";
$q = mysqli_query($connection, $sql) or die("Error in Selecting " . mysqli_error($connection));
//create an array
$jsonData = array();
while($row = mysqli_fetch_assoc($q))
{
$jsonData[$row['map_type']] = $row['map_value'];
// Issue is here
if (!isset($jsonData['markers']))
{
$jsonData['markers'] = array();
}
array_push($jsonData['markers'],
array('marker_name'=> $row['marker_name'],
'marker_lat'=> $row['marker_lat'], 'marker_long'=> $row['marker_long']));
}
echo json_encode($jsonData);
Als solche Ich erhalte folgende Ausgabe:
{
"image_link": "www.google.com",
"markers": [{
"marker_name": "Food",
"marker_lat": "32.91",
"marker_long": "-117.14"
}, {
"marker_name": "Food",
"marker_lat": "32.91",
"marker_long": "-117.14"
},
...
}],
"top_lat": "32.91",
"right_long": "-117.13",
"zoom_level": "17.5"
}
Die einzigen Daten aus der zweiten Tabelle sind die in markers
enthaltenen Daten, während die anderen Felddaten aus der ersten Tabelle stammen.
Das Problem ist in dem Kommentar mit der Bezeichnung "Problem ist hier". Jeder Markierungseintrag in der zweiten Tabelle wird wiederholt 4 mal, wobei die Anzahl der Felder in der ersten Tabelle darstellt.
Ich weiß, dass ich in diesem Bereich etwas falsch mache, aber ich habe gerade angefangen zu lernen und versuche, PHP besser zu verstehen.
Die Ausgabe sollte wie folgt aussehen etwas, wo markers
bis zum Ende der Liste angehängt ist, mit der richtigen Anzahl der Einträge:
{
"image_link": "www.google.com",
"top_lat": "32.91",
"right_long": "-117.13",
"zoom_level": "17.5",
"markers": [{
"marker_name": "Food",
"marker_lat": "32.91",
"marker_long": "-117.14"
}, {
"marker_name": "Party",
"marker_lat": "31.22",
"marker_long": "-119.20"
}, {
"marker_name": "Chips",
"marker_lat": "29.02",
"marker_long": "-120.00"
}]
}
Wie kann ich diese Ausgabe erreichen?
UPDATE: als @sepehr erklärt hat, verstehe ich die Sache jetzt und haben den Code durch den folgenden ersetzt 2 Abfragen zu machen:
$sql = "select * from first_table";
$result = mysqli_query($connection, $sql) or die("Error in Selecting " . mysqli_error($connection));
$jsonData = array();
while($row =mysqli_fetch_assoc($result))
{
$jsonData[$row['map_type']] = $value;
}
$sql = "select * from second_table";
$result = mysqli_query($connection, $sql) or die("Error in Selecting " . mysqli_error($connection));
$index = 1;
while($rownew =mysqli_fetch_assoc($result))
{
$markers[$index] = array("marker_name" => $rownew['marker_name'], "marker_lat" => doubleval($rownew['marker_lat']), "marker_long" => doubleval($rownew['marker_long']));
++$index;
}
$jsonData['markers'] = $markers;
echo json_encode ($jsonData);
Dies erreicht die korrekte Ausgabe, aber kann mir jemand lassen wissen, ob dies der effizienteste und optimale Weg ist?
Warum willst du das tun ?? Die Position des Array-Schlüssels beherrscht PHP nicht. – HoangHieu
versuchen Sie einfach, '//zu setzen Problem ist hier if (! Isset ($ jsonData ['marker'])) { $ jsonData ['marker'] = array(); } array_push ($ jsonData [ 'Marker'], array ('marker_name' => $ row [ 'marker_name'], 'marker_lat' => $ row [ 'marker_lat'], 'marker_long' => $ row ['marker_long'])); } 'insisde die' if (! Isset ($ jsonData ['marker'])) ' –
Das' JOIN' macht keinen Sinn. Sie benötigen eine ON-Klausel oder Sie erhalten ein Cross-Produkt. – tadman