PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tabellen verknüpfen und in PHP ausgeben


Steelrose
12.08.2005, 12:18:02
Hallo Leute,

wie so viele, die hier posten, werde auch ich langsam wahnsinnig. Seit 2 Tagen stöbere ich in diversen Foren und "google" mich wund ohne zählbares Ergebnis. Nun hoffe ich auf Eure Hilfe.

Ziel- und Problembeschreibung:
Zwei existierende Tabellen adressen und kompetenzen in der Datenbank studio sollen nach einer Sucheingabe durch den User miteinander verknüpft eine Query ausführen und dann ein Ergebnis zurückliefern, welches dann mittels PHP in eine HTML Seite eingebunden wird. Im konkreten Fall heißt das, dass die verschiedenen Kompetenzen aus der Tabelle kompetenzen ausgewählt werden, welche über den Suchbegriff verfügen. Danach soll dann in der Tabelle adressen geprüft werden, welche User über die Kompetenzen verfügen, welche in der Tabelle kompetenzen ausgeworfen wurden.
Die Probleme, welche sich mir nun stellen sind:

ist die Verknüpfung der Tabellen bzw. die Query korrekt?
wie lautet der PHP Code, um das Ergebnis auszugeben?


Die Tabellen:
Die Tabelle adressen hat folgende für die Aufgabe relevante Spalten:

id
name
kompetenzid

Die Tabelle kompetenzen hat folgende für die Aufgabe relevante Spalten:

id
art
suchbegriffe


Die Sucheingabe:
Über ein Formular wird der Suchbegriff folgendermaßen an das PHP-Suchscript übergeben:

<form method="post" action="suche.php">
<input type="text" name="suchbegriff" size="20" class="input">
<input type="submit" value="suchen" class="input">
</form>

Die Query im PHP-Suchscript:

query=mysql_query("
SELECT
kompetenzen.id,
kompetenzen.art,
kompetenzen.suchbegriffe,
adressen.id,
adressen.name,
adressen.kompetenzid,
FROM
kompetenzen,
adressen
WHERE
kompetenzen.suchbegriffe LIKE '%_POST[suchbegriff]%'
ORDER BY
adressen.name ASC
");

Die Ausgabe im PHP-Suchscript:

while($result=mysql_fetch_array($query)) {
$ausgabe="
<table cellspacing=\"5\" cellpadding=\"5\" border=\"0\">
<tr>
<td align=\"left\" class=\"flowtext\">
Kompetenz: ".$result['kompetenzen.art']." bei ".$result['adressen.name']."
</td>
</tr>
</table>
";
}


So, ich hoffe nun, dass ich die Problematik, die Aufgabe und das Ziel vernünftig und schlüssig dargestellt habe. Ich wäre Euch sehr dankbar, wenn Ihr mir da ggf. auf die Sprünge helfen könntet.

Greetz
Steelrose

xabbuh
12.08.2005, 13:03:05
Folgende Punkte halte ich für verbesserungswürdig:

Du solltest angeben, über welche Spalte die beiden Tabellen miteinander verknüpft sind, da du sonst alle Kombinationen aus den Datensätzen der beiden Tabellen erhälst. Dies funktioniert z.B. mit einem INNER JOIN (http://dev.mysql.com/doc/mysql/en/join.html).
Benutze mysql_real_escape_string() (http://www.php.net/mysql_real_escape_string) um die Gefahr von SQL-Injections (http://php-faq.de/q/q-sql-injection.html) zu verringern.
Ich würde einen FULLTEXT-Index (http://dev.mysql.com/doc/mysql/en/fulltext-search.html) über die Spalte suchbegriffe in der Tabelle kompetenzen legen.


<?php
$sql = "SELECT
k.id AS kompetenzid,
k.art,
k.suchbegriffe,
a.id AS adressenid,
a.name
FROM
kompetenzen AS k
INNER JOIN
adressen AS a
ON
k.id = a.kompetenzid
WHERE
MATCH(k.suchbegriffe) AGAINST('" . mysql_real_escape_string($_POST['suchbegriffe']) . "')
ORDER BY
a.name";
?>


Übrigens mal ein Lob an dieser Stelle für deine absolut klasse Problembeschreibung.

Steelrose
14.08.2005, 17:43:24
Vielen Dank für Deine Anregungen (und Dein Lob). Werde sie mal umsetzen und dann berichten, ob es geklappt hat und woran es gehapert hatte.

Greetz
Steelrose

Steelrose
16.08.2005, 03:25:13
Prima, die Query hat funktioniert!!! Danke dafür!!!

Allerdings habe ich jetzt Probleme mit der PHP-Ausgabe der Query. Hast Du da evtl. noch einen Tipp, worauf ich achten sollte?

Danke im Voraus!!!
Greetz
Steelrose

xabbuh
16.08.2005, 10:18:17
Allerdings habe ich jetzt Probleme mit der PHP-Ausgabe der Query. Hast Du da evtl. noch einen Tipp, worauf ich achten sollte?
Wie machen sich diese Probleme denn bemerkbar?

Steelrose
16.08.2005, 18:08:31
Sorry, es hat sich erledigt. Hatte einen Tippfehler gemacht und den natürlich als allerletztes bemerkt.
Noch einmal ein "fettes Gracias" für Deine Hilfe !!!!

Greetz
Steelrose