Anzeige - [Interessiert an einer Anzeige?]
(?) Tags raten (?) (edit)
 
Reply to this topicStart new topicStart Poll
> MySQL-Abfrage geht nicht?
pl_90
  Geschrieben am: Sa 24.05.2008, 17:58
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 236
Mitglied seit: 29.03.2007


Eine Frage...

Wieso geht diese Abfrage:
SELECT * FROM tabelle WHERE MATCH(spalte_1, spalte_2) AGAINST ('suchbegriff' IN BOOLEAN MODE);

... aber diese nicht?

SELECT * FROM tabelle WHERE MATCH(spalte_1, spalte_2) AGAINST ('suchbegriff');


hab mal sogar so getestet wie bei MySQL http://dev.mysql.com/doc/refman/5.1/de/fulltext-search.html beschrieben ist, aber geht irgendwie nicht... Fulltext ist also da.. aber kein Plan was los ist...

Server Version: 5.0.32-Debian_7etch5-log
MySQL-Client-Version: 5.0.32
phpMyAdmin - 2.9.1.1-Debian-6


kann bitte mir jemand helfen?
Danke schön im Voraus.


--------------------
Top
PMUsers Website
Top
 
 
Lenny
#2 Geschrieben am: Sa 24.05.2008, 18:37 (+00:38)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 158
Mitglied seit: 20.02.2004


QUOTE

SELECT * FROM tabelle WHERE MATCH(spalte_1, spalte_2) AGAINST ('suchbegriff');


Die Abfrage sollte nach meiner Meinung schon gehen. Ich vermute bei dir liegt der Fehler woanders. Hast du schon mit mysql_error() oder mysql_errno() (siehe PHP Manual: mysql_error()...) versucht, um nähere Angaben des Fehlers zu erhalten?



--------------------
Top
PMEmail Poster
Top
 
connectR
#3 Geschrieben am: Sa 24.05.2008, 18:52 (+00:14)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 86
Mitglied seit: 29.01.2008


Könnte es sein das deine zweite Abfrage einfach die 50-Grenze überschreitet?
Wenn jedes Wort im Text in mindestens 50 Prozent aller Datensätze auftaucht, liefert die Abfrage kein Ergebnis.
Die Boolesche-Suche verwendet diese 50%-Marke nicht und liefert entsprechend auch Ergebnisse.


--------------------
Ich bin freiberuflicher Programmierer - Und du?
Have a look at BodyVoten.de - Bilder voten
Top
PMUsers Website
Top
 
Lenny
#4 Geschrieben am: Sa 24.05.2008, 18:55 (+00:02)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 158
Mitglied seit: 20.02.2004


Zur Ergänzung:

Eventuell fehlt bei dir ein FULLTEXT KEY Index für die Spalte spalte_1 und spalte_2.


--------------------
Top
PMEmail Poster
Top
 
pl_90
#5 Geschrieben am: Sa 24.05.2008, 20:00 (+01:05)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 236
Mitglied seit: 29.03.2007


ja, hab alles versucht... also liefert keine Ergebnisse und keine Fehler... wink.gif
die 50 % Grenze weiß nicht genau, ich glaube nicht, da ich ca. 15000 verschiedene Einträge habe...
aber ich habe gerade eben festgestellt, dass die Abfrage geht, wenn man nur eine Spalte verwendet, also so:

SELECT * FROM tabelle WHERE MATCH(spalte_1) AGAINST ('suchbegriff');

und das geht dann nicht:

SELECT * FROM tabelle WHERE MATCH(spalte_1, spalte_2) AGAINST ('suchbegriff');

woran kann das eigentlich liegen? das ist irgendwie voll komisch... hm...


--------------------
Top
PMUsers Website
Top
 
connectR
#6 Geschrieben am: Sa 24.05.2008, 20:08 (+00:07)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 86
Mitglied seit: 29.01.2008


Poste uns doch am Besten mal die komplette Struktur der Tabelle wie sie im Moment aussieht ;-)


--------------------
Ich bin freiberuflicher Programmierer - Und du?
Have a look at BodyVoten.de - Bilder voten
Top
PMUsers Website
Top
 
pl_90
#7 Geschrieben am: Sa 24.05.2008, 21:04 (+00:56)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 236
Mitglied seit: 29.03.2007


ok.. so sieht das ding aus wink.gif

CREATE TABLE `DAW_DATAS` (
`ID` int(11) NOT NULL auto_increment,
`TOKEN` varchar(50) NOT NULL,
`EROTIK` tinyint(4) NOT NULL default '0',
`TITEL` varchar(255) NOT NULL,
`KEYWORDS` varchar(255) NOT NULL,
`TEXT` longtext NOT NULL,
`META_TEXT` varchar(255) NOT NULL,
`WTAGS` tinytext NOT NULL,
`URL` varchar(255) NOT NULL,
`DATUM` varchar(20) default NULL,
PRIMARY KEY (`ID`),
FULLTEXT KEY `TITEL` (`TITEL`),
FULLTEXT KEY `TEXT` (`TEXT`),
FULLTEXT KEY `META_TEXT` (`META_TEXT`),
FULLTEXT KEY `WTAGS` (`WTAGS`),
FULLTEXT KEY `URL` (`URL`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


--------------------
Top
PMUsers Website
Top
 
jAuer
Jürgen Auer - freiberufl. Programmierer
#8 Geschrieben am: Sa 24.05.2008, 21:12 (+00:07)
Report PostQuote Post

AyomRank 9
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 2308
Mitglied seit: 4.02.2006


TEXT ist ein allgemeines Sql-Schlüsselwort.

Es ist nie eine gute Idee, Schlüsselwörter für Spaltennamen zu verwenden. Das müßte man normalerweise maskieren.

Ändere den Spaltennamen mal ab (nur nicht auf ntext - das ist auch ein Schlüsselwort).


--------------------
Web-Anwendung 3.0: Ein Online-Kalender für Termine vieler Filialen.

server-daten - die Single-Data-Solution: Web-Datenbanken als Online - CRM - Lösung.
Ihre Geschäftsprozesse entscheiden, was Ihre Online-Datenbank macht. Sie konzentrieren sich auf Ihr Kerngeschäft - die Datenbank funktioniert.
Top
PMEmail PosterUsers Website
Top
 
pl_90
#9 Geschrieben am: Sa 24.05.2008, 21:20 (+00:08)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 236
Mitglied seit: 29.03.2007


hab auf BODY_TEXT geändert.. trotzdem geht nicht wenn ich zwei spalten angebe (wie oben #5)... hm...


--------------------
Top
PMUsers Website
Top
 
jAuer
Jürgen Auer - freiberufl. Programmierer
#10 Geschrieben am: Sa 24.05.2008, 21:32 (+00:11)
Report PostQuote Post

AyomRank 9
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 2308
Mitglied seit: 4.02.2006


Jetzt habe ich mal in der mySql-Hilfe nachgesehen (ich verwende das ja sonst nicht):

QUOTE
Die MATCH()-Spaltenliste muss exakt mit der Spaltenliste in einer FULLTEXT-Indexdefinition der Tabelle übereinstimmen, sofern für MATCH() nicht der Modus IN BOOLEAN MODE aktiviert ist.


Du hast oben nur Indices für Einzelspalten definiert. Also kann das (ohne BOOELEAN MODE) auch nur für Einzelspalten funktionieren, nicht für zwei Spalten.

Erstelle einen zusätzlichen Index für zwei Spalten.

PS: Lenny hat das oben (#4) bereits geschrieben.


--------------------
Web-Anwendung 3.0: Ein Online-Kalender für Termine vieler Filialen.

server-daten - die Single-Data-Solution: Web-Datenbanken als Online - CRM - Lösung.
Ihre Geschäftsprozesse entscheiden, was Ihre Online-Datenbank macht. Sie konzentrieren sich auf Ihr Kerngeschäft - die Datenbank funktioniert.
Top
PMEmail PosterUsers Website
Top
 
pl_90
#11 Geschrieben am: Sa 24.05.2008, 21:37 (+00:05)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 236
Mitglied seit: 29.03.2007


Hab ich doch eigentlich:

CREATE TABLE `DAW_DATAS` (
`ID` int(11) NOT NULL auto_increment,
`TOKEN` varchar(50) NOT NULL,
`EROTIK` tinyint(4) NOT NULL default '0',
`TITEL` varchar(255) NOT NULL,
`KEYWORDS` varchar(255) NOT NULL,
`TEXT` longtext NOT NULL,
`META_TEXT` varchar(255) NOT NULL,
`WTAGS` tinytext NOT NULL,
`URL` varchar(255) NOT NULL,
`DATUM` varchar(20) default NULL,
PRIMARY KEY (`ID`),
FULLTEXT KEY `TITEL` (`TITEL`),
FULLTEXT KEY `BODY_TEXT` (`BODY_TEXT`),
FULLTEXT KEY `META_TEXT` (`META_TEXT`),
FULLTEXT KEY `WTAGS` (`WTAGS`),
FULLTEXT KEY `URL` (`URL`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1;


--------------------
Top
PMUsers Website
Top
 
Maik
power-labels AG
#12 Geschrieben am: Sa 24.05.2008, 23:13 (+01:36)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 480
Mitglied seit: 16.03.2006


Ich glaube Lenny und jAuer meinen einen Mehrfeld-Index, wie zB. sowas:
CODE
ALTER TABLE `daw_datas` ADD FULLTEXT `TITELANDTEXT` (`TITEL` ,`BODY_TEXT`);


Du musst halt wissen für welche Felder du Mehrfeld Fulltext Abfragen machen willst, und dafür eigenen Index anlegen.
Evtl. solltest du die Struktur mal überdenken, du hast da momentan schon soviele Fulltext-Indizes, das kann nicht gut sein. Ein Insert dauert da bei 15000 vorhandenen Datensätzen bestimmt schon Sekunden...


--------------------
Top
PMEmail PosterUsers WebsiteICQ
Top
 
pl_90
#13 Geschrieben am: So 25.05.2008, 13:36 (+14:22)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 236
Mitglied seit: 29.03.2007


QUOTE (Maik @ So 25.05.2008, 00:13)
Ich glaube Lenny und jAuer meinen einen Mehrfeld-Index, wie zB. sowas:
CODE
ALTER TABLE `daw_datas` ADD FULLTEXT `TITELANDTEXT` (`TITEL` ,`BODY_TEXT`);


Du musst halt wissen für welche Felder du Mehrfeld Fulltext Abfragen machen willst, und dafür eigenen Index anlegen.
Evtl. solltest du die Struktur mal überdenken, du hast da momentan schon soviele Fulltext-Indizes, das kann nicht gut sein. Ein Insert dauert da bei 15000 vorhandenen Datensätzen bestimmt schon Sekunden...

eigentlich nicht... geht ganz schnell... ich versuche gleich dieses mehrfaches, aber eigentlich hab ich so etwas ähnliches gemacht.... CREATE TABLE ... (... FULLTEXT (TITEL,BODY_TEXT)) aber mysql hat selber "weiter gemacht" also den oberen code erzeugt.. hm... ich versuche nochmal...


--------------------
Top
PMUsers Website
Top
 
pl_90
#14 Geschrieben am: So 25.05.2008, 14:04 (+00:27)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 236
Mitglied seit: 29.03.2007


so... danke leute... jetzt gehts... also das mit dem mehrfachen index hat schon mal geklappt.. so sieht jetzt das ganze aus:

CREATE TABLE `DAW_DATAS` (
`ID` int(11) NOT NULL auto_increment,
`TOKEN` varchar(50) NOT NULL,
`EROTIK` tinyint(4) NOT NULL default '0',
`TITEL` varchar(255) NOT NULL,
`KEYWORDS` varchar(255) NOT NULL,
`BODY_TEXT` longtext NOT NULL,
`META_TEXT` varchar(255) NOT NULL,
`WTAGS` tinytext NOT NULL,
`URL` varchar(255) NOT NULL,
`DATUM` varchar(20) default NULL,
PRIMARY KEY (`ID`),
FULLTEXT KEY `BODY_TEXT` (`BODY_TEXT`),
FULLTEXT KEY `TWTU` (`TITEL`,`WTAGS`,`URL`),
FULLTEXT KEY `META_TEXT` (`META_TEXT`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

und meine jetzige Abfrage so:

SELECT *, MATCH (TITEL,WTAGS,URL) AGAINST ('suchbegriff') AS SCORE FROM DAW_DATAS WHERE MATCH (TITEL,META_TEXT,URL) AGAINST ('suchbegriff' IN BOOLEAN MODE) ORDER BY SCORE DESC LIMIT XX,YY


das geht wie gesagt, aber wenn daran etwas falsch ist, sagt bitte bescheid.. weiß noch jemand zufällig, wie man Relevanz mit php berechnet? weil SCORE bei dieser Abfrage ist die Relevanz, jedoch wird z.B. 6.545985649 ausgegeben, ich möchte aber für den Besucher in % 0-100% anzeigen... weiß jemand wie das geht? danke schön.. smile.gif


--------------------
Top
PMUsers Website
Top
 
Lenny
#15 Geschrieben am: So 25.05.2008, 17:36 (+03:32)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 158
Mitglied seit: 20.02.2004


QUOTE (pl_90 @ So 25.05.2008, 14:04)
weiß noch jemand zufällig, wie man Relevanz mit php berechnet? weil SCORE bei dieser Abfrage ist die Relevanz, jedoch wird z.B. 6.545985649 ausgegeben, ich möchte aber für den Besucher in % 0-100% anzeigen... weiß jemand wie das geht? danke schön.. smile.gif

Du kannst das Problem wie folgt lösen:

1) Ermittle in der Ergebnismenge die maximale Relevanz. Diese speicherst du in einer Variable z.B. $rMaxScore ab.
2) Für jeden Datensatz (in der Ergebnismenge) kannst du den Prozentsatz wie folgt berechnen:

100 * ($rScore / $rMaxScore) = ... [%], wobei $rScore die Relevanz des Datensatzes ist.


--------------------
Top
PMEmail Poster
Top
 
pl_90
#16 Geschrieben am: So 25.05.2008, 19:07 (+01:31)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 236
Mitglied seit: 29.03.2007


achso.. danke.. nur wie soll ich die maximale Relevanz ($rMaxScore) ermitteln?


--------------------
Top
PMUsers Website
Top
 
Lenny
#17 Geschrieben am: So 25.05.2008, 19:33 (+00:26)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 158
Mitglied seit: 20.02.2004


Ganz einfach: Du fügst in deiner Abfrage eine absteigende Sortierung nach Relevanz hinzu. Die Relevanz der ersten Datensatz ist somit die maximale Relevanz (entspricht 100%) in der Ergebnismenge, diese kannst du separat in einer Variable abspeichern....


--------------------
Top
PMEmail Poster
Top
 
pl_90
#18 Geschrieben am: So 25.05.2008, 19:46 (+00:12)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 236
Mitglied seit: 29.03.2007


achso.. hehe... danke vielmals für alles an alle.. smile.gif


--------------------
Top
PMUsers Website
Top
 
pl_90
#19 Geschrieben am: Mo 26.05.2008, 13:37 (+17:50)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 236
Mitglied seit: 29.03.2007


em.. sorry iregendwie check ich das doch nicht... kommt nur scheiße bei mir raus...
kann mir jemand bitte ein beispiel schreiben? vielen danke im voraus... smile.gif


--------------------
Top
PMUsers Website
Top
 
Thema wird von 0 Benutzer(n) gelesen (0 Gäste und 0 anonyme Benutzer)
0 Mitglieder:
Trackback-Url: http://www.ayom.com/track/t/24568

Topic Options Reply to this topicStart new topicStart Poll

 


> Ähnliche Themen
Suche Freelancer: Ajax, XML, PHP, MySQL omc 155 2 Mo 6.10.2008, 20:14
Zielgruppe versteht Webseite nicht Martin J 273 7 Mi 1.10.2008, 11:40
Lösung für: Content Slider-Java Script-PHP-MySql Antoine Johannes 130 2 Fr 26.09.2008, 12:54
onload submit geht nicht Sancheck 178 6 So 21.09.2008, 18:31
PHP + MySQL 2 Fragen an euch Coach 152 1 Do 18.09.2008, 10:52
Erscheine nicht in google superbobbes 359 16 Mi 17.09.2008, 18:37
layer-ref geht in die BetaPhase Tripolis 195 3 Mo 15.09.2008, 16:15
PHP und MySQL Probleme Swisstiger 501 4 So 14.09.2008, 22:23




Anzeige - [Interessiert an einer Anzeige?]



Anzeigen


[Interessiert an einer Anzeige?]