MySQL - Join
Hallo alle zusammen!
Ich habe zwei Tabellen in meiner Datenbank. Die eine beinhaltet Teams und einen Code zum Team und die andere beinhaltet Adressen und Informationen. In Zukunft soll über die Webapp ein Standort hinzugefügt werden und dem einem oder mehreren Teams zugeordnet werden.
Um die Suche möglichst komfortabel zu gestalten soll es zwei Formularfelder geben, eins um ein Team bzw. einen Code zu suchen und eines um die Straße zu suchen (Anzeige von Teams an diesem Standort).
Das erste funktioniert, die Straßensuche jedoch nicht.
Hier einmal mein Code.
view_team.php
search.php
Wie man sieht, wird bei der Teamausgabe die DB erst nach Teams durchforstet und gleichzeitig ausgegeben. Mit jedem Schleifenaufruf werden die Inhalte unter die Teams aufgeschrieben. Das gleiche sieht aus wie eine Art Akkordeon zum aufklappen (Stichwort: FAQ zum aufklappen).
Ich gehe davon aus, dass man hier mit einem Join bei der ersten DB-Abfrage arbeiten muss um die Straße ($searchadd) und nicht das Team ($searchoe) zu suchen. Versteht ihr, was ich mir hier vorstelle?
Danke für eure Hilfe!!
Gruß
Thomas
Ich habe zwei Tabellen in meiner Datenbank. Die eine beinhaltet Teams und einen Code zum Team und die andere beinhaltet Adressen und Informationen. In Zukunft soll über die Webapp ein Standort hinzugefügt werden und dem einem oder mehreren Teams zugeordnet werden.
Um die Suche möglichst komfortabel zu gestalten soll es zwei Formularfelder geben, eins um ein Team bzw. einen Code zu suchen und eines um die Straße zu suchen (Anzeige von Teams an diesem Standort).
Das erste funktioniert, die Straßensuche jedoch nicht.
Hier einmal mein Code.
view_team.php
<?php
session_start();
include ('config.php');
$_Session['site'] = "view_team.php";
if ($maintenance == 'true'){
include('maintenance.php');
}
else{
?>
<html>
<head>
<title><?php echo $webapp; ?> | Teamübersicht</title>
</head>
<body onload="initialize();codeAddress()">
<?php
include('header-m.php');
?>
<div id="container">
<div class="row">
<?php
include('search.php');
?>
<div class="col s8 offset-s2">
<ul class="collapsible" data-collapsible="accordion">
<?php
$searchoe = '';
$searchoe = $_GET['searchoe'];
$searchadd = '';
$searchadd = $_GET['searchadd'];
$ausgabeAnzahl = "SELECT count(nummer) AS anzahl FROM `team5-kundendb`.teams";
$db_ergAnzahl = mysql_query($ausgabeAnzahl);
$anz = mysql_fetch_array($db_ergAnzahl, MYSQL_ASSOC);
$anzahlDatensaetze = $anz['anzahl'];
$ausgabe = "SELECT * FROM `team5-kundendb`.teams WHERE nummer LIKE '%".$searchoe."%' OR name LIKE '%".$searchoe."%'";
$db_erg = mysql_query($ausgabe);
if (!$db_erg){
die(mysql_error());
}
if($anzahlDatensaetze > 0){
while ($td = mysql_fetch_array($db_erg, MYSQL_ASSOC)){
echo "<li>";
echo "<div class='collapsible-header'><b>";
echo $td['nummer']."</b> - ".$td['name'];
echo "</div>";
#echo $ausgabe;
$aussenstelle = "SELECT * FROM `team5-kundendb`.aussenstelle WHERE teamnummer LIKE '".$td['nummer']."' AND strasse LIKE '%".$searchadd."%'";
$dberg = mysql_query($aussenstelle);
if (!$dberg){
die(mysql_error());
}
while ($erg = mysql_fetch_array($dberg, MYSQL_ASSOC)){
?>
<!--<link href="https://developers.google.com/maps/documentation/javascript/examples/default.css" rel="stylesheet">
<script src="https://maps.googleapis.com/maps/api/js"></script>
<script>
var geocoder;
var map;
var mapOptions = {
zoom: 17,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
var marker;
function initialize() {
geocoder = new google.maps.Geocoder();
map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions);
codeAddress();
}
function codeAddress() {
var address = document.getElementById('address').value;
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
map.setCenter(results.geometry.location);
if(marker)
marker.setMap(null);
marker = new google.maps.Marker({
map: map,
position: results.geometry.location,
draggable: true
});
google.maps.event.addListener(marker, "dragend", function() {
document.getElementById('lat').value = marker.getPosition().lat();
document.getElementById('lng').value = marker.getPosition().lng();
});
document.getElementById('lat').value = marker.getPosition().lat();
document.getElementById('lng').value = marker.getPosition().lng();
} else {
alert('Geocode was not successful for the following reason: ' + status);
}
});
}
</script>-->
<?php
$db_id = $erg['nummer'];
#echo $aussenstelle;
echo "<div class='collapsible-body'>";
echo "<div class='row'>";
echo "<div class='col s6 left'>";
echo "<br><u>".$erg['plz']." ";
echo $erg['ort']."</u><br>";
echo $erg['strasse']." ";
echo $erg['hausnummer']."<br>";
if ($erg['parken'] == '1'){
echo "<br><b>✓</b> Parken<br>";
echo "<div style='font-size: 13px;'>".$erg['zufahrt']."</div>";
}else{
echo "<br><b>✗</b> Parken<br>";
echo "<div style='font-size: 13px;'>Es muss ein öffentlicher Parkplatz genutzt werden. Parkkosten werden im dienstlichen Interesse erstattet.</div>";
}
if ($erg['fahrstuhl'] == '1'){
echo "<b>✓</b> Fahrstuhl<b><br>";
}else{
echo "<br><b>✗</b> Fahrstuhl<b><br>";
}
echo "<br>".$erg['etage']."</b> Etage<br>";
echo "</div>";
echo "<div class='col s6 right'>";
if ($erg['ansprechpartner'] != ''){
echo "<br><b>Ansprechpartner: </b><br>";
echo $erg['ansprechpartner'];
}
if ($erg['telefon'] != ''){
echo "<br><b>Telefon: </b><br>";
echo $erg['telefon']."<br>";
}
if ($erg['website'] != ''){
echo "<br><u><a href='http://".$erg['website']."' target=_blank>Website</a></u>";
}
echo "<br><u><a href='https://www.google.de/maps/place/".str_replace(' ','+',$erg['strasse']).",+".$erg['hausnummer']."+".$erg['plz']."+".$erg['ort']."' target=_blank>Google Maps</a></u>";
#echo "<input class='hide' type='textbox' id='address' value='".$erg['plz']." ".$erg['ort'].", ".$erg['strasse']." ".$erg['hausnummer']."'>";
?>
<!--<div>
<input type="button" value="Geocode" onclick="codeAddress()">
<input class="hide" type="text" id="lat"/>
<input class="hide" type="text" id="lng"/>
<div id="map_canvas" style="height:395px;width:100%;top: 10px;right: -3px;"></div>
<?php
#echo "<iframe src='https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d2436.400065346088!2d".$erg['maps_lng']."!3d".$erg['maps_lat']."55592416!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x47b00b354c8a706d%3A0x6ed124e9c6c2ac9d!2s".str_replace(' ','+',$erg['strasse'])."+".$erg['hausnummer']."%2C+".$erg['plz']."+".$erg['ort']."!5e0!3m2!1sde!2sde!4v1466148523622' style='width:100%; height:395px; top:10px; right:-3px;' frameborder='0' style='border:0' allowfullscreen></iframe>";
?>
</div>-->
<?php
echo "</div>";
echo "<div class='col s12'>";
if ($erg['besonderheiten'] != ''){
echo "<br><b>Sonstiges: </b><br>";
echo $erg['besonderheiten'];
}
echo "</div>";
?>
<?php
echo "</div>";
#echo $aussenstelle;
}
echo "</li>";
}
flush();
}
?>
</ul>
</div>
</div>
</div>
<?php
include('footer-m_small.php');
?>
</body>
</html>
<?php
}
?>
search.php
<div class="row">
<div class="col s8 offset-s2">
<ul class="tabs">
<li class="tab col s6"><a href="#oe" class="active">OE-Suche (Name oder Nummer)</a></li>
<li class="tab col s6"><a href="#strasse">Straßen-Suche</a></li>
</ul>
</div>
<div id="oe" class="col s12">
<?php
$searchoe = '';
echo "<form action='view_team.php' method='get'>";
?>
<div class="col s8 offset-s2">
<div class='row valign-wrapper'>
<div class='input-field col s10 center-align'>
<input id='searchoe' class='search validate valign' type='text' name='searchoe' ".$searchrows.">
<label for="searchoe">Volltextsuche wird unterstützt</label>
</div>
<div class="col s2 valign center-align">
<button type='submit' class='btn-flat waves-effect waves-light' name='Suche' value='Suche'>Suche</button>
</div>
</div>
</div>
<!--</form>-->
</div>
<div id="strasse" class="col s12">
<?php
$searchadd = '';
#echo "<form action='view_team.php' method='get'>";
?>
<div class="col s8 offset-s2">
<div class='row valign-wrapper'>
<div class='input-field col s10 center-align'>
<input id='searchadd' class='search validate valign' type='text' name='searchadd' ".$searchrows.">
<label for="searchadd">Volltextsuche wird unterstützt</label>
</div>
<div class="col s2 valign center-align">
<button type='submit' class='btn-flat waves-effect waves-light' name='Suche' value='Suche'>Suche</button>
</div>
</div>
</div>
</form>
</div>
</div>
Wie man sieht, wird bei der Teamausgabe die DB erst nach Teams durchforstet und gleichzeitig ausgegeben. Mit jedem Schleifenaufruf werden die Inhalte unter die Teams aufgeschrieben. Das gleiche sieht aus wie eine Art Akkordeon zum aufklappen (Stichwort: FAQ zum aufklappen).
Ich gehe davon aus, dass man hier mit einem Join bei der ersten DB-Abfrage arbeiten muss um die Straße ($searchadd) und nicht das Team ($searchoe) zu suchen. Versteht ihr, was ich mir hier vorstelle?
Danke für eure Hilfe!!
Gruß
Thomas
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 307471
Url: https://administrator.de/contentid/307471
Ausgedruckt am: 16.11.2024 um 17:11 Uhr
4 Kommentare
Neuester Kommentar
Moin,
zwar kein Beitrag zur Lösung deiner Frage, aber dein Code enthält einige SQL-Injection Lücken:
Frag dich mal was passiert, wenn $searchadd den Wert
hat.
Und: kannst du mal die nicht für das Problem relevanten Teile des Codes entfernen? 200 Zeilen Code is schon ne Menge, wenns um ein JOIN geht ;)
Verrat uns lieber wie die Tabellen aufgebaut sind.
lg,
Slainte
zwar kein Beitrag zur Lösung deiner Frage, aber dein Code enthält einige SQL-Injection Lücken:
$aussenstelle = "SELECT * FROM `team5-kundendb`.aussenstelle WHERE teamnummer LIKE '".$td['nummer']."' AND strasse LIKE '%".$searchadd."%'";
$dberg = mysql_query($aussenstelle);
Frag dich mal was passiert, wenn $searchadd den Wert
%'; DROP TABLE aussenstelle; --
Und: kannst du mal die nicht für das Problem relevanten Teile des Codes entfernen? 200 Zeilen Code is schon ne Menge, wenns um ein JOIN geht ;)
Verrat uns lieber wie die Tabellen aufgebaut sind.
lg,
Slainte
Hi,
was der Vorredner sagt plus...
Liest sich so als hättest du noch keinen Join geschrieben.
Sollte bei der DB in etwa so aussehen.
Selber lesen macht schlau
Gruß,
André
PS: Abgesehen davon frage ich mich warum so viele PHP-Piepel ihren Code in direkt ins Markup stopfen müssen. Es gibt doch auch für PHP Viewengines.
was der Vorredner sagt plus...
Liest sich so als hättest du noch keinen Join geschrieben.
Sollte bei der DB in etwa so aussehen.
SELECT
t.*, a.*
FROM
'team5-kundendb'.teams t
INNER JOIN `
team5-kundendb`.aussenstelle a ON t.nummer = a.teamnummer
WHERE
a.strasse LIKE '%".$searchadd."%'
Selber lesen macht schlau
Gruß,
André
PS: Abgesehen davon frage ich mich warum so viele PHP-Piepel ihren Code in direkt ins Markup stopfen müssen. Es gibt doch auch für PHP Viewengines.