Problem mit Suche !

mAu

Erfahrenes Mitglied
Hi!

Ich bin grad dabei ein kleines Forum mit PHP / mySql zu schreiben!
Hab mich vorhin an die Suche gemacht... Also, wenn ich jetzt ein Suchbegriff eingebe, so findet er auch die richtigen Threads, aber in der Resultliste von der Suchfunktion wird der Threadtitel sooft ausgegeben, wie er Replies enthält... hier mal ein auszug des Scripts...:

PHP:
	if(isset($_POST['gosearch'])){
		if($_POST['sep'] == "and") $seperator = " AND ";
		else $seperator = " OR ";
		$woerter = explode(" ",$_POST['suche']);
		if($_POST['searchby'] == "titel") $search = "(p".$bn."_threads.threadtitel LIKE \"%".$woerter[0]."%\")".$seperator;
		if($_POST['searchby'] == "all") $search = "(p".$bn."_reply.replymessage LIKE \"%".$woerter[0]."%\") OR (p".$bn."_threads.threadtitel LIKE \"%".$woerter[0]."%\")".$seperator;
		if(count($woerter) > 1){
		 for($i=1;$i<count($woerter);$i++){
			if($_POST['searchby'] == "titel") $search .= "(p".$bn."_threads.threadtitel LIKE \"%".$woerter[$i]."%\")".$seperator;
			if($_POST['searchby'] == "all") $search .= "(p".$bn."_reply.replymessage LIKE \"%".$woerter[$i]."%\") OR (p".$bn."_threads.threadtitel LIKE \"%".$woerter[$i]."%\")".$seperator;
		 }
		}
		($seperator == " AND ") ? $search = substr($search, 0, -5) : $search = substr($search, 0, -4);
		$select = mysql_query("
			SELECT
			p".$bn."_threads.*,
			p".$bn."_reply.parentthreadid,
			p".$bn."_user.userid,
			p".$bn."_user.username
			FROM p".$bn."_threads
			LEFT JOIN p".$bn."_user ON (p".$bn."_threads.tlastpostid=p".$bn."_user.userid)
			LEFT JOIN p".$bn."_reply ON (p".$bn."_threads.threadid=p".$bn."_reply.parentthreadid)
			WHERE 
			".$search."
			ORDER BY p".$bn."_threads.tlastposttime") or die(mysql_error());	
		if(mysql_num_rows($select) > 0){
			while($search = mysql_fetch_array($select)){
				$lastpost = "<a href=\"user.php?show=detail&userid=".$search['lastpostid']."\"><b>".$search['username']."</b></a><br><font class=\"smallfont\">".date("d.m.Y, H:i",$search['lastposttime'])."</font>";
				$icon 		= getThreadIcon($indexthread['threadicon']);
				eval("\$ausgabe .= \"".gettemplate("search_searchbit")."\";");	
			}
		}
		else{
			eval("\$ausgabe = \"".gettemplate("search_noresult")."\";");
		}
	}

Hoffe, ich hab mich einigermaßen verständlich ausgedrückt...

mfg mAu

*edit*: Hier mal ein Screenshot wie es aussieht, der Thread "Hallo Welt 2 !" sollte eigendlich nut 1x angezeigt werden. Je mehr Replies ich dem Thread zuordne, desdo öfter wird er bei der Suchausgabe angezeigt. D.h. zur Zeit sind 3 Antworten in dem Thread
 
Zuletzt bearbeitet:
Hi,

warum begrenzt Du die Ausgabe jedes Threads nicht mit einem Zähler auf 1?
Oder Du prüfst ob z.B. der Thread-Titel in der Datenbank in dem Sucherergbnis schon gefunden wurde.

Gruß Xabbu!
 
Jo stimmt :) Habs auch gleich mal gemacht und hat geklappt... Ich wollte das halt direkt in der SQL-Query lösen, habs jetzt aber anders gemacht...

Lösung:
PHP:
.... sql query etc... (siehe alter code)
		if(mysql_num_rows($select) > 0){
			$foundids		= array();
			while($searchres = mysql_fetch_array($select)){
				if(!in_array($searchres['threadid'],$foundids)){
					$lastpost = "<a href=\"user.php?show=detail&userid=".$searchres['lastpostid']."\"><b>".$searchres['username']."</b></a><br><font class=\"smallfont\">".date("d.m.Y, H:i",$search['lastposttime'])."</font>";
					$icon 		= getThreadIcon($searchres['threadicon']);
					$foundids[]	= $searchres['threadid'];
					eval("\$ausgabe .= \"".gettemplate("search_searchbit")."\";");				
				}
			}
		}
... siehe alter code ende...

mfg mAu
 
Zurück