Suchmaschine - Resultatausgabe

progafrog

Mitglied
Hey,

ich bastel zur Zeit an einem script für eine php/ mysql Suche.
Ich stehe nur vor folgenden Problemen:
1. werden Datensätze teilweise doppelt ausgegeben
2. Es soll nach einer art bestem Ergebnis gefiltert bzw. sortiert werden. (absteigend natürlich)

Ich habe noch nicht allzuviel in PHP gemacht, daher weiss ich nicht genau ob mein Script korrekt ist einen kleinen Teil der Ausgabe sehr ihr hier:

PHP:
while($row = mysql_fetch_array($result)) 
{
	if($row['newstitle'] == true OR $row['newscontent']== true ) 
	{
		echo"<br />$row[newstitle]<br /><br />$row[newscontent] <br />"; 
	}
	if($row['articletitle'] == true Or $row['articlecontent'] ==true )
	{
		echo"<br />$row[articletitle]<br /><br />$row[articlecontent] <br />";  
	}
}

Es wäre günstig, wenn euch ein paar Tipps oder Verbesserungen einfallen ; ]

mfg
 
Okay, Hier ist die Select Anweisung:


PHP:
$select = "Select newsdb.newstitle, newsdb.newsid, 
newsdb.newscontent, articledb.articleid, 
articledb.articletitle, articledb.articlecontent, 
tutorialdb.tutid, tutorialdb.tuttitle, 
tutorialdb.tutcontent
FROM 
articledb, newsdb, tutorialdb 
WHERE 
newsdb.newstitle LIKE '%".$suche."%' OR 
newsdb.newscontent LIKE '%".$suche."%' OR 
articledb.articletitle LIKE '%".$suche."%' OR 
articledb.articlecontent LIKE '%".$suche."%' OR 
tutorialdb.tuttitle LIKE '%".$suche."%' OR 
tutorialdb.tutcontent LIKE '%".$suche."%' " ;
 
Mir fällt spontan auf, dass du auf $row["articletitle"] zugreifst aber in der Abfrage "articledb.articletitle" abfragst. So auch bei den anderen Werten.

Schreibe an den Anfang von deinem Skript einmal:
PHP:
error_reporting(E_ALL);
und schau dir die Fehlermeldungen an.
 
Ist das nicht richtig Zodiac?

Ich habe die Codezeile eingefügt aber das einzige was error report ausgibt ist :
*******
und damit kann ich nichts anfangen .
 
Ist das nicht richtig Zodiac?

Oha. Gerade getestet und doch klappt anscheinend. Sah nur sehr ungewohnt aus.

Ich habe die Codezeile eingefügt aber das einzige was error report ausgibt ist :
*******
und damit kann ich nichts anfangen .

Ich auch nicht, da dies eine unübliche Ausgabe ist. Vielleicht steht ja im Quelltext der ausgegebenen Seite mehr.

Zu deinem zweiten Anliegen:
Jeden Eintrag könnte man auf mehrere Kriterien prüfen und dafür "Punkte" geben, z.B. :
  • Anzahl der Fundstellen
  • Aktualität
  • Zugriffe nach der Suchmaske
  • Schlagwörter
  • etc.

Dies in einem neuen Array speichern (Key: "Punkte", Value: Array mit dem Eintrag), sortieren lassen mit [phpf]ksort[/phpf] und demnach ausgeben.

Nur eine von vielen Möglichkeiten.
Das mit dem Fundstellen zählen oder andere Kriterien bilden, geht sicherlich auch schon direkt in SQL.
http://dev.mysql.com/doc/refman/5.1/en/string-functions.html
 
Zuletzt bearbeitet:
In dem Post siehst du einen Link, den du unter anderem lesen kannst.

Da endlos viele Beispiele / Kombinationen möglich sind hier nur einmal die Anzahl der Fundstellen über PHP.
$row["topic"] ist jeweils der Titel,
$row["content"] ist jeweils der Inhalt,
$search ist jeweils der gesuchte String,
$a ist unser neues Array,
das folgende ist eingefasst in eine while-Schleife zum lesen der SQL-Daten
PHP:
$a[ substr_count( $row["content"], $search) ][] = array(
  "topic" => $row["topic"],
  "content" => $row["content"]
);

Nun hat das Array ungefähr den Aufbau
[Anzahl Fundstellen] => Array( ... Einzelne Einträge ... )
Dazu lässt sich krsort verwenden, da es absteigend die Schlüssel (hier: Anzahl Fundstellen) sortiert.
PHP:
krsort($a);

// Nacheinander Fundstellen-Anzahl-Blöcke auslesen
foreach ($a as $sub_a)
{
  // Beiträge einzeln auslesen
  foreach ($sub_a as $entry)
  {
    // nun ist der Titel in $entry["topic"]
    // und der Inhalt in $entry["content"]
  }
}

Beachte: Je mehr du machst umso mehr muss dein Server rumrechnen.
 
Zurück