Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

Problem mit einer Abfrage

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
Michael1967
PostRank 9
PostRank 9
Beiträge: 2158
Registriert: 26.10.2005, 23:51

Beitrag von Michael1967 » 05.07.2009, 18:06

Hallo,

habe mal wieder ein Problem. Also ich habe eine Datenbanktabelle - darin gespeichert werden die Suchbegriffe. Also die Suchbegriffe womit meine Besucher über Google auf meine Seite gekommen sind.

Nun habe ich eine Suche in meine Seite eingebaut. Sollte nun jemand nach dem Suchbegriff "witze" suchen, so möchte ich am Ende der Seite die letzten Suchanfragen zu dem Begriff "witze" einblenden.

Folgende Abfrage erzeugt schon eine Ausgabe - nur leider nicht so wie ich möchte.

Code: Alles auswählen

$abfrage = "SELECT DISTINCT words FROM words_search where words LIKE '%$the_query%' GROUP BY words order by id DESC limit 10"; 
$ergebnis = mysql_query($abfrage);
   
while($row = mysql_fetch_object($ergebnis)) {

echo "'.$row->words.'";

} 
In %$the_query% befindet sich der gesuchte Begriff.

Ausgabe schaut ungefähr so aus -

lustige witze
schwitzen
usw.

Nun der Begriff "schwitzen" beinhaltet wohl auch "witze", soll aber nicht mit eingeblendet werden.

Was muss ich machen, damit er keine Suchbegriffe innerhalb eines Begriffes mit einbezieht?

Also die Suche nach "witze" hat ja nichts mit schwitzen zu tun, lol.

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


LinkPop
PostRank 9
PostRank 9
Beiträge: 1677
Registriert: 02.05.2004, 13:52

Beitrag von LinkPop » 05.07.2009, 20:49

Mit Leerzeichen arbeiten:

Code: Alles auswählen

words LIKE '% $the_query %' OR words LIKE '$the_query %' OR words LIKE '% $the_query'
[url=httpss://www.rankseek.com/][img]httpss://www.rankseek.com/img/rankseek-xs-2.png[/img][/url]
  • Täglicher Ranking-Check Deiner Top-Keywords mit Traffic-Index für Mobile und Desktop, Serp-View, Reporting, Ranking-Charts, Konkurrenzanalyse, Ranking-Verteilung, Keyword-Suggest und mehr für nur 11,90 € / Monat. Jetzt alle rankseek-Tools 30 Tage kostenlos testen » [url=httpss://www.rankseek.com/features.php]Features[/url]

Michael1967
PostRank 9
PostRank 9
Beiträge: 2158
Registriert: 26.10.2005, 23:51

Beitrag von Michael1967 » 05.07.2009, 22:36

Da wäre ich jetzt nicht drauf gekommen. Klappt wunderbar. Vielen Dank für den Tipp! :D

nerd
PostRank 10
PostRank 10
Beiträge: 4023
Registriert: 15.02.2005, 04:02

Beitrag von nerd » 06.07.2009, 10:10

total schlecht fuer die performance wenn du bei sowas mit "like '%'" rangehst, da bei sowas auch ein eventuell gesetzter index nutzlos ist. deutlich sinnvoller waere es hier die abfrage schon vor dem insert auseinanderzumehmen, und pro zeile nur ein wort zu speichern. das macht auch alle abfragen leichter....

Michael1967
PostRank 9
PostRank 9
Beiträge: 2158
Registriert: 26.10.2005, 23:51

Beitrag von Michael1967 » 06.07.2009, 15:24

Und wie macht man das?

Outman
PostRank 6
PostRank 6
Beiträge: 394
Registriert: 03.12.2004, 22:55
Wohnort: Orlamünde

Beitrag von Outman » 06.07.2009, 16:15

@Michael1967 Nerd meint, dass du bei deinen Eintrag bevor dieser gespeichert wird, das Keywort in einer Keywort Tabelle gespeichert wird und über einer Verknüpfungstabelle an hand einer ID Nummer die Verknüpfung gemacht wird.

Wenn du nun auf einen Artikel die entsprechenden Keywörter haben möchtest, musst du nur noch eine Abfrage auf das Keywort in der Keywort Tabelle machen und an hand der ID Nummer die entsprechende Verknüpfung zu den Artikel finden. Dadurch das dies direkt über ein Zahlenfeld mit einem Index gemacht wird gewinnst du bedeuten mehr Performa. Wenn du erst die Tabelle sortieren musst mit GROUP BY, damit entsprechend nur ein einzelnes Keywort gefunden wird mit DISTINCT, kann es bei großen Tabellen recht langsam werden. Ich würde mir Gedanken machen wenn du viele Keywörter in naher Zukunft in dieser Tabellen speichern wirst.
Webhosting Partnerprogramm mit 2 Refebenen, PHP Webspace mit .de Domain ab 2 Euro, Zusätzlich suche ich Linkpartner zum Thema "Webmaster". Suchst du einem PHP Programmierer?

Michael1967
PostRank 9
PostRank 9
Beiträge: 2158
Registriert: 26.10.2005, 23:51

Beitrag von Michael1967 » 06.07.2009, 18:06

Die Suchbegriffe befinden sich schon in einer Tabelle. Das sind Suchbegriffe womit meine Seite über Google gefunden wurde. Das hat mit Artikeln und IDs nichts zu tun!

nerd meinte (denke ich) was ganz anderes.

Outman
PostRank 6
PostRank 6
Beiträge: 394
Registriert: 03.12.2004, 22:55
Wohnort: Orlamünde

Beitrag von Outman » 06.07.2009, 19:26

Michael1967 hat geschrieben:Die Suchbegriffe befinden sich schon in einer Tabelle. Das sind Suchbegriffe womit meine Seite über Google gefunden wurde. Das hat mit Artikeln und IDs nichts zu tun!

nerd meinte (denke ich) was ganz anderes.
Nicht wirklich :lol: ich habe seine Aussage ein wenig falsch im ersten Moment interpretiert und schon ein wenig weiter gedacht.

Also hier mal ein Code womit Du vor den Speichern auf der Tabelle Checken kannst, ob schon ein Eintrag vorhanden ist:

Code: Alles auswählen

<?php
/*
 * Created on 06.07.2009 by Nico Schubert
 */
 
$mein_suchwort='keywort';
if&#40;$mein_suchwort!=''&#41;&#123;
	$sql_select="SELECT count&#40;id&#41; AS `anz` FROM `words_search` WHERE `words` = '".mysql_escape_string&#40;$mein_suchwort&#41;."' LIMIT 1;";
	$query=mysql_query&#40;$sql_select&#41; or die&#40;'Fehler beim Lesen!'&#41;;
	$daten=mysql_fetch_assoc&#40;$query&#41;;
	if&#40;!isset&#40;$daten&#91;'anz'&#93;&#41;&#41; $anz=0; else $anz=$daten&#91;'anz'&#93;;
	if&#40;$anz==0&#41;&#123;
	   // Neuer Eintrag
	   $sql_insert="INSERT INTO `words_search` &#40;`words`&#41; VALUES&#40;'".mysql_escape_string&#40;$mein_suchwort&#41;."'&#41;;";
	   mysql_query&#40;$sql_insert&#41; or die&#40;'Fehler beim Speichern!'&#41;;
	&#125; else &#123;
	   // Update	
	&#125;
&#125;
?>
Ich hoffe das ich ein wenig für klarheit gesorgt habe und es für Dich nun verständlicher ist. :) Ich habe da schon viel weiter gedacht ....
Zuletzt geändert von Outman am 06.07.2009, 19:36, insgesamt 1-mal geändert.
Webhosting Partnerprogramm mit 2 Refebenen, PHP Webspace mit .de Domain ab 2 Euro, Zusätzlich suche ich Linkpartner zum Thema "Webmaster". Suchst du einem PHP Programmierer?

Outman
PostRank 6
PostRank 6
Beiträge: 394
Registriert: 03.12.2004, 22:55
Wohnort: Orlamünde

Beitrag von Outman » 06.07.2009, 19:34

Auch hier noch die Antwort zum Thema Suche, ich würde das mit MATCH und AGAINST machen https://dev.mysql.com/doc/refman/5.1/de ... earch.html
Webhosting Partnerprogramm mit 2 Refebenen, PHP Webspace mit .de Domain ab 2 Euro, Zusätzlich suche ich Linkpartner zum Thema "Webmaster". Suchst du einem PHP Programmierer?

Michael1967
PostRank 9
PostRank 9
Beiträge: 2158
Registriert: 26.10.2005, 23:51

Beitrag von Michael1967 » 06.07.2009, 22:54

Hmmm, irgendwie hat man mich wohl falsch verstanden. Also in meiner Tabelle sind die Suchbegriffe schon gespeichert - das passiert immer dann, wenn jemand über die Google-Suche usw. auf meine Seite kommt.

Ich möchte nun einfach nur die letzten 10 Suchanfragen zu einem Suchbegriff einblenden. Ich frage mich gerade, warum ich checken soll ob ein Eintrag in der Tabelle schon vorhanden ist?

*grübel*

Da sind schon 10.000 oder mehr Suchanfragen in der Datenbank gespeichert. Sucht nun jemand (nur als Beispiel) auf meiner Seite nach Witze - so möchte ich dazu die letzten 10 Suchanfragen aus der Tabelle holen.

Outman
PostRank 6
PostRank 6
Beiträge: 394
Registriert: 03.12.2004, 22:55
Wohnort: Orlamünde

Beitrag von Outman » 07.07.2009, 06:57

Huhu,


hier ein Beispiel Abfrage mit MATCH und AGAINST. Damit diese Abfrage geht muss das Feld "words" eine Fulltext Index haben. Ich glaube es hat kein Sinn Dir zu erklären, wieso man in der Datenbank versucht nicht doppelte Datensätze zu haben. Ich habe mit mein Beiträgen oben versucht Dir zu erklären wie man das mit dreit Tabellen umgehen kann.

Code: Alles auswählen

<?php
/*
 * Created on 07.07.2009 by Nico Schubert
 */
$keywort='witz';
$sql_select="SELECT id, words, MATCH &#40;words&#41; AGAINST &#40;'".mysql_escape_string&#40;$keywort&#41;."'&#41; AS score FROM words_search WHERE MATCH &#40;words&#41; AGAINST &#40;'".mysql_escape_string&#40;$keywort&#41;."'&#41; LIMIT 10";
$query = mysql_query&#40;$sql_select&#41;;
if&#40;mysql_num_rows&#40;$query&#41;!=0&#41;&#123;
	echo 'Keywort -> Relevante zu <br>';
    while&#40;$daten = mysql_fetch_assoc&#40;$query&#41;&#41;&#123;
    	echo $daten&#91;"words"&#93;.' -> '.$daten&#91;"score"&#93;.'<br>';
    &#125;
&#125;
?>
Webhosting Partnerprogramm mit 2 Refebenen, PHP Webspace mit .de Domain ab 2 Euro, Zusätzlich suche ich Linkpartner zum Thema "Webmaster". Suchst du einem PHP Programmierer?

Michael1967
PostRank 9
PostRank 9
Beiträge: 2158
Registriert: 26.10.2005, 23:51

Beitrag von Michael1967 » 07.07.2009, 08:48

Ja erstmal danke! Ich habe doch gar kein Problem mit doppelten Einträgen in der Datenbank. Hatte ich hier auch nicht erfragt - deswegen wunderte ich mich ja auch - warum ich das voher checken soll. :D

Mit deinem letzten Posting hast du mir aber geholfen. Vielen Dank!

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag