Schutz vor Doppeleinträgen, Volltext-Such Hilfe...

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
terminatorx120
Mitglied
Beiträge: 214
Registriert: 19.02.2007 22:25
Wohnort: Barmstedt
Kontaktdaten:

Schutz vor Doppeleinträgen, Volltext-Such Hilfe...

Beitrag von terminatorx120 »

Hi,
Hat jemand eine Idee, dass EInhalte nicht doppelt angezeigt werden?
Es ist für ein Such-Skript!

Code: Alles auswählen

$searchwords = explode(" ", $_POST['s']);

$i = 0;
$count = count($searchwords);

$show = '<table width="780">';
while($i < $count){

  $sql_s = "SELECT *
FROM ".$table_prefix."video
WHERE titel LIKE CONVERT( _utf8 '%".$searchwords[$i]."%'
USING latin1 )
COLLATE latin1_swedish_ci
OR game LIKE CONVERT( _utf8 '%".$searchwords[$i]."%'
USING latin1 )
COLLATE latin1_swedish_ci
OR beschreibung LIKE CONVERT( _utf8 '%".$searchwords[$i]."%'
USING latin1 )
COLLATE latin1_swedish_ci";
  $array = 'titel';
  $array_id = 'id';
echo $sql_s;
  if (!($result = mysql_query($sql_s))){
       message_die(CRITICAL_ERROR, "Konnte Querrie auf Allgemeine Video-tabelle nicht ausf&uuml;hren!<br><br>Could not querrie video information!", "", __LINE__, __FILE__, $sql);
  } 
  while ($s_row = mysql_fetch_assoc($result)){
 //Zeigt noch Doppelt an!
    $show .= '<tr><td style="text-align:left" class="row1"><strong><a href="http://www.keepgaming.de/video/'.$s_row['video_id'].'">'.$s_row['titel'].'</a></strong><br />'.kurzTitel($s_row['beschreibung'], 200).'<br /><td></tr>';
  
}   
$i++;
}
Danke
Zuletzt geändert von terminatorx120 am 10.11.2007 16:30, insgesamt 2-mal geändert.
MfG
TerminatorX120
http://www.KeepGaming.de
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Wenn du für jeden Suchbegriff eine neue Anfrage startest, ist es nicht zu vermeiden, daß manche Einträge in beiden Abfragen vorkommen.

Ich würde dir empfehlen, die Full-Text Search Functions zu nutzen.
KB:knigge
Benutzeravatar
terminatorx120
Mitglied
Beiträge: 214
Registriert: 19.02.2007 22:25
Wohnort: Barmstedt
Kontaktdaten:

Beitrag von terminatorx120 »

So ungefähr??

Code: Alles auswählen

$sql_s = "SELECT *, MATCH (titel,beschreibung) AGAINST ('SUCHWÖRTER')
        FROM 
".$table_prefix."video";
Könntet jemand sonst eine direkte Verbesserung vornehmen?
Wäre super!

Danke

EDIT:

Ich glaube ich habe es:

Code: Alles auswählen

SELECT *
FROM TABLE_PREFIXvideo
WHERE MATCH (
titel, beschreibung
)
AGAINST (
'"WORT1" "WORT2"'
IN BOOLEAN
MODE
)
Zuletzt geändert von terminatorx120 am 10.11.2007 15:16, insgesamt 1-mal geändert.
MfG
TerminatorX120
http://www.KeepGaming.de
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Das MATCH muss noch ins WHERE, da du ja warscheinlich nur die Einträge haben willst, in denen die Suchergebnisse auch vorkommen. Dann kannst du noch nach der Relevanz sortieren, damit die besten Suchergebnisse an erster Stelle stehen. Und Select * is evil

Code: Alles auswählen

SELECT id, titel, beschreibung, ..., MATCH (titel,beschreibung) AGAINST ('SUCHWÖRTER') AS relevanz
FROM {$table_prefix}video
WHERE MATCH (titel, beschreibung) AGAINST ('SUCHWÖRTER')
ORDER BY relevanz DESC
KB:knigge
Benutzeravatar
terminatorx120
Mitglied
Beiträge: 214
Registriert: 19.02.2007 22:25
Wohnort: Barmstedt
Kontaktdaten:

Beitrag von terminatorx120 »

Oh, da hast du geschrieben, als ich gerade meinen bearbeitet habe.

Wie meinste das genau mit der Relevanz?

Ich habe nun mal eine TEST-Abfrage gemacht und bekomme dies:
SELECT id, titel, beschreibung
MATCH (
titel, beschreibung
)
AGAINST (
'Crysis'
) AS relevanz
FROM kg_video
WHERE MATCH (
titel, beschreibung
)
AGAINST (
'Crysis'
)
ORDER BY relevanz DESC
LIMIT 0 , 30

MySQL meldet: Dokumentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'MATCH ( titel , beschreibung ) AGAINST ( 'Crysis' ) AS relevanz FROM kg_video ' at line 1
Danke!
MfG
TerminatorX120
http://www.KeepGaming.de
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Da fehlt ein Komma :roll:
KB:knigge
Benutzeravatar
terminatorx120
Mitglied
Beiträge: 214
Registriert: 19.02.2007 22:25
Wohnort: Barmstedt
Kontaktdaten:

Beitrag von terminatorx120 »

Wo, hinter beschreibung?

Als ich da eines gesetzt habe, kam diese Meldung:

Code: Alles auswählen

#1191 - Can't find FULLTEXT index matching the column list 





Ich habe jetzt fast alles, nur keine Relevanz:

Code: Alles auswählen

$searchwords = explode(" ", $_POST['s']);

$i = 0;
$count = count($searchwords);
$search = "";
$show = '<table width="780">';
while($i < $count){

if ($count <= 1 && $i == 0){
$search = '"'.$searchwords[$i].'"';
}
else{
$search .= ', "'.$searchwords[$i].'"';
}
$i++;
}
  $sql_s = "SELECT *
FROM ".$table_prefix."video
WHERE MATCH (
titel, beschreibung
)
AGAINST (
'$search'
IN BOOLEAN
MODE
)";
  $array = 'titel';
  $array_id = 'id';
echo $sql_s;
  if (!($result = mysql_query($sql_s))){
       message_die(CRITICAL_ERROR, "Konnte Querrie auf Allgemeine Video-tabelle nicht ausf&uuml;hren!<br><br>Could not querrie video information!", "", __LINE__, __FILE__, $sql);
  } 
  while ($s_row = mysql_fetch_assoc($result)){
 //Zeigt noch Doppelt an!
    $show .= '<tr><td style="text-align:left" class="row1"><strong><a href="http://www.keepgaming.de/video/'.$s_row['video_id'].'">'.$s_row['titel'].'</a></strong><br />'.kurzTitel($s_row['beschreibung'], 200).'<br /><td></tr>';
  
}   

$gesamt = mysql_num_rows($result);

$show .= '</table>';
"kurzText($string, $limit)" verhindert übrigens, dass die Beschreibung zu lang ist!
MfG
TerminatorX120
http://www.KeepGaming.de
Benutzeravatar
terminatorx120
Mitglied
Beiträge: 214
Registriert: 19.02.2007 22:25
Wohnort: Barmstedt
Kontaktdaten:

Beitrag von terminatorx120 »

Keiner eine Idee??
MfG
TerminatorX120
http://www.KeepGaming.de
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Du musst den Index für genau die Spalten erstellen, in denen du suchst, sonst funktioniert es nicht.
KB:knigge
Benutzeravatar
terminatorx120
Mitglied
Beiträge: 214
Registriert: 19.02.2007 22:25
Wohnort: Barmstedt
Kontaktdaten:

Beitrag von terminatorx120 »

Ein wenig Konkreter, bitte.
Ich habe eigentlich schon alles getestet...

Ich habe es nun so verstanden:

Ich muss im Select die Row genau angeben:
SELECT titel, beschreibung, game

Oder wie sonst??

Bitte, wenn möglich auch direkten Beispiel Code geben... :wink:
MfG
TerminatorX120
http://www.KeepGaming.de
Antworten

Zurück zu „Coding & Technik“