 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
24.09.2003, 14:27
|
#1
|
|
TP-Junior
Registriert seit: Jul 2003
Ort: Dortmund
|
Tabelle durchsuchen
Hallo,
ich möchte eine MySql-Tabelle nach mehreren Wörtern ( über Suchmaske ) durchsuchen.
######################################
Eingabe:
<form method="POST" action="suche.php">
<br>Suchen nach:
<input type="text" name="suche" size="20">
<input type="submit" value="Suchen" name="button">
</form>
######################################
Abfrage:
$suche = trim ($suche);
$suche = explode (" ",$suche);
$sql = "select * from $tabelle where TITEL LIKE '%$suche[0]%' OR URL LIKE '%$suche[0]%' OR BESCHREIBUNG LIKE '%$suche[0]%' ORDER BY TITEL ASC ";
$sql = "select * from $tabelle where TITEL LIKE '%$suche[1]%' OR URL LIKE '%$suche[1]%' OR BESCHREIBUNG LIKE '%$suche[1]%' ORDER BY TITEL ASC ";
$q_sql = mysql_query($sql,$dbcon);
#########################################
Dies funktioniert aber nur wenn genau 2 Wörter eingegeben werden. Bei 1 Wort oder 3,4 usw. Wörtern wird die ganze Tabelle ausgegeben.
Kann mir da jemand weiterhelfen?
MfG M.J.
|
|
|
24.09.2003, 16:36
|
#2
|
|
TP-Supporter
Registriert seit: Feb 2003
Ort: Bremen
|
[komplett Edit]
PHP-Code:
$terms = trim($terms);
$terms = explode(" ",$terms);
$termcounter = 0;
$sql = "SELECT * FROM $table WHERE ";
foreach ($terms as $value)
{
if ( $termcounter != 0 )
{
$sql.=" OR ";
};
$sql.="titel LIKE '%$value%' OR url LIKE '%$value%' OR beschreibung LIKE '%value%' ";
$termcounter++;
};
$sql.= " ORDER BY titel ASC;";
Die foreach Schleife verlängert die SQL Abfrage für jeden Suchbegriff um die 3 Suchabfragen.
$termcounter ist hierbei wichtig um wiederrum ein " OR " zwischen diese dreierblöcke zu setzen.
$sql.=""; hängt nen String an $sql dran.
Geändert von H3ck|0 (24.09.2003 um 16:48 Uhr).
|
|
|
24.09.2003, 17:49
|
#3
|
|
TP-Junior
Registriert seit: Jul 2003
Ort: Dortmund
|
Hallo,
Danke für die Hilfe aber...
Ich habe das ganze so übernommen - Resultat - ich bekomme, egal wieviele Suchbegriffe ich eingebe immer die ganze Tabelle als
Ausgabe. Muss noch irgentwo was falsch sein.
MfG
|
|
|
24.09.2003, 18:25
|
#4
|
|
TP-Supporter
Registriert seit: Feb 2003
Ort: Bremen
|
Bei meinem Script funktioniert diese Abfrage, allerdings durchsuche ich nur eine Spalte ($sql.="$_GET[column] LIKE '%$value%' wird in der foreach Schleife hinzugefügt).
Bist du sicher, dass es keine Überschneidungen in den drei Spalten gibt?
Es wird alles ausgewählt wo titel, url oder beschreibung mindestens EINEN der Suchbegriffe enthalten.
__________________
The truth You hear may not be the truth You think it is
|
|
|
24.09.2003, 19:12
|
#5
|
|
TP-Junior
Registriert seit: Jul 2003
Ort: Dortmund
|
hi,
muss jetzt leider weg werde ich morgen nochmal prüfen aber ich glaube nicht das da überschneidungen sind.
MfG M.J.
|
|
|
25.09.2003, 09:17
|
#6
|
|
TP-Junior
Registriert seit: Jul 2003
Ort: Dortmund
|
Hallo,
habe nochmal alles überprüft,irgentwelche Überschneidungen sind nicht vorhanden. Hier nochmal der jetzt geänderte Quellcode:
<?php
require("config.php");
$terms = trim($terms);
$terms = explode(" ",$terms);
$termcounter = 0;
$sql = "SELECT * FROM $tabelle WHERE ";
foreach ($terms as $value)
{
if ( $termcounter != 0 )
{
$sql.=" OR ";
};
$sql.="TITEL LIKE '%$value%' OR URL LIKE '%$value%' OR BESCHREIBUNG LIKE '%value%' ";
$termcounter++;
};
$sql.= " ORDER BY titel ASC;";
$r_sql = mysql_query($sql,$dbcon);
{
while($row = mysql_fetch_array($r_sql))
{
echo "<TABLE><TR>";
echo "<TD>";
echo "<img src=\"..\image\quader.gif\" > ";
echo "<a target=\"_blank\" href=\"$row[url]\">$row[TITEL]</a>";
echo "</TD>";
echo "</TR>";
echo "<TR>";
echo "<TD>";
echo "$row[BESCHREIBUNG]";
echo "<br><br>";
echo "</TD></TR></TABLE>";
}
}
?>
MfG M.J.
|
|
|
25.09.2003, 14:19
|
#7
|
|
TP-Supporter
Registriert seit: Feb 2003
Ort: Bremen
|
PHP-Code:
<HTML>
<BODY>
<?php
include("./config/mysql.inc.php");
include("./config/config.inc.php");
$connection = @mysql_connect($db_host,$db_user,$db_pw) or die("Datenbankfehler: Keine Verbindung möglich");
mysql_select_db($db_db);
$terms = trim($_GET[terms]);
$terms = explode(" ",$terms);
$termcounter = 0;
$tabelle = "test";
$sql = "SELECT * FROM $tabelle WHERE ";
foreach ($terms as $value)
{
if ( $termcounter != 0 )
{
$sql.=" OR ";
};
$sql.="TITEL LIKE '%$value%' OR URL LIKE '%$value%' OR BESCHREIBUNG LIKE '%$value%' ";
$termcounter++;
};
$sql.= " ORDER BY titel ASC;";
$r_sql = mysql_query($sql,$connection);
while($row = mysql_fetch_array($r_sql))
{
echo '
<TABLE>
<TR>
<TD>
<img src="../image/quader.gif" >
<a target="_blank" href="'.$row[url].'">'.$row[titel].'</a>
</TD>
</TR>
<TR>
<TD>
'.$row[beschreibung].'
</TD>
</TR>
</TABLE>';
};
mysql_close($connection);
?>
<form method="get" action="<?php $PHP_SELF ?>">
<br>Suchen nach:
<input type="text" name="terms" size="20">
<input type="submit" value="Suchen" name="button">
</form>
</BODY>
</HTML>
Dieses Script ist bei mir lauffähig. Als Beispiel DB habe ich dies hier verwendet. Es existieren keine Überschneidungen und die Suche funktioniert prinzipiell damit.
Code:
Exportiert mit phpmyadmin.
CREATE TABLE `test` (
`titel` text NOT NULL,
`url` text NOT NULL,
`beschreibung` text NOT NULL
) TYPE=MyISAM;
INSERT INTO `test` VALUES ('gggg', 'hhhh', 'iiii');
INSERT INTO `test` VALUES ('aaaa', 'bbbb', 'cccc');
INSERT INTO `test` VALUES ('dddd', 'eeee', 'ffff');
INSERT INTO `test` VALUES ('jjjj', 'kkkk', 'llll');
INSERT INTO `test` VALUES ('mmmm', 'nnnn', 'oooo');
INSERT INTO `test` VALUES ('pppp', 'qqqq', 'rrrr');
INSERT INTO `test` VALUES ('ssss', 'tttt', 'vvvv');
INSERT INTO `test` VALUES ('wwww', 'xxxx', 'yyyy');
Kleiner Tipp für deine Beiträge und Quelltexte:
Es ist übersichtlicher wenn du beim Code mit Tabs oder Blanks zum Beispiel Schleifenkörper einrückst.
Und bei php Quelltexten einfach das BBCode Tag für php benutzt.
|
|
|
25.09.2003, 20:01
|
#8
|
|
TP-Junior
Registriert seit: Jul 2003
Ort: Dortmund
|
Hallo,
erstmal vielen Dank für Deine Hilfe. Bin erst geade nach Hause gekommen und habs gleich mal getestet.
Super - jetzt klappt die ganze Sache!
MfG M.J.
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 16:10 Uhr.
|
 |