hab ich schon… das kommt nicht selten vor, aber ich würd jetzt sagen bei 10 von 30 Datensätzen kommts vor…
Ich kann auch nach “Mac” suchen, was bei 5 von 30 Datensätzen vorkommt…
Liegt dein Fulltext-Index auf exakt der Spaltenkombination, wie du sie hier angegeben hast?
Das ist noch zu unpräzise, um wirklich beurteilen zu können, was es bedeutet.
Wenn in den Datensätzen „windows … windows windows windows … windows … windows“ drin stünde, könnte das schon ausreichen, um das Wort in den kritischen Bereich zu hieven.
„Mac“ wirst du bei Defaulteinstellungen mit einer normalen Volltextsuche sowieso nicht finden, weil der Default für ft_min_word_len4 ist.
So ein Problem ist schwer „von außen“ zu untersuchen, weil zu viele Faktoren unbekannt sind.
Neben den eigentlichen Daten auch weitere Aspekte der Serverkonfiguration; es wäre bspw. auch denkbar(!), dass eine eigene/erweiterte Stopword-Liste verwendet wird, in die „windows“ mit hineingepackt wurde.
Im BOOLEAN MODE ist die 50% Limitierung (wenn ein Wort in mehr als 50% der Datensätze vorkommt, wird es ignoriert) und die Relevanzsortierung deaktiviert. Also vergleiche doch mal die Ergebnisse mit und ohne BOOLEAN MODE
Nutzt du auch “ENGINE=MyISAM;”?
Also ist’s ne MyISAM Table?
Sind die Felder: CHAR, VARCHAR, oder TEXT?
PS: du könntest den Query auch ansich anpassen… funktionieren sollte es jedoch gleich:
<span class="syntaxdefault">$sql </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">'SELECT COUNT(*) AS `count` FROM `'</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">DB_PREFIX</span><span class="syntaxkeyword">.</span><span class="syntaxstring">'profiles_data` WHERE MATCH(`cpu_name`,`gpu`,`software_os`) AGAINST(\''</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">mysql_real_escape_string</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$string</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$db</span><span class="syntaxkeyword">).</span><span class="syntaxstring">'\''</span><span class="syntaxkeyword">.(</span><span class="syntaxdefault">$boolean</span><span class="syntaxkeyword">?</span><span class="syntaxstring">' IN BOOLEAN MODE'</span><span class="syntaxkeyword">:</span><span class="syntaxstring">''</span><span class="syntaxkeyword">).</span><span class="syntaxstring">')'</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> </span>bin mir bei deinem Code net ma sicher ob “count” nicht sogar nen Problem bereiten könnte… kp wie es MySQL mit der Groß-/kleinSchreibung sieht. Jedenfalls ists mit dem grave accent sicher
Den Query lass ich extra so, MySQL hat damit kein Problem (benutz ich auch bei anderen Queries wo ich mit COUNT(*) arbeite), und die Variablen sind bereits escaped (einige zeilen vorher)
[quote=“DHMH”][…]
Den Query lass ich extra so, MySQL hat damit kein Problem […][/quote]Weil du “Glück” hast^^
Tabellennamen sollte man nun mal Kennzeichnen, 1. weiß MySQL dann was abgeht, 2. hast du kein Problem mit Reservierten Keywords.
Wie gesagt… gerade beim “count” bin ich mir net sicher da es “COUNT” gibt…
Es geht aber eben ums Prinzip, nur weil MySQL schlecht geschrieben ist, daher “vieles” frisst, oder eben nen Browser der auch aus scheiße Gold macht, muss man es ja net so lassen^^ Machs richtig oder gar net
bzgl. deines Problems… solltest vielleicht mal jemanden via Teamviewer gucken lassen… wird glaube ich zu Umständlich das so zu klären
Zumindest muss man davon ausgehen das du weißt was du tust bzw. alles richtig machst, wenn’s dann doch net ist muss man entweder bei NULL anfangen oder aber findet’s nie^^ [size=85](oder mit Glück)[/size]
Du kannst deine Tabellen, Spalten, … gerne kennzeichnen. Nur leider gehören die Backticks nicht zum SQL-Standard, und du verlierst die Kompatibilität zu jedem anderen RDBMS.
Da Konvertiert man’s mit nem Regex Replace^^ Ne Sache von paar Sekunden^^
SQLite ist z.B. grave accent compatibel.
Man macht sowieso in MySQL unter Umständen Sachen anders als woanders, vor allem den PHP Code muss man für C/C++ etc. anpassen da ist nen Regex für die Querys wirklich lächerlich^^
Kannst du nen konkretes Beispiel geben wo es zu umständlich wäre wenn die Querys, MySQL angepasst sind? [size=85](also eben wegen Kompatibilität)[/size]
Hat das noch irgendwas mit dem eigentlichen Thema zu tun, was ihr zwei hier diskutiert …?
Ja, Volltextsuche auf diese Art und Weise z.B.
In Query, in der du das drin hast, kannst du hinsichtlich „Kompabilität“ zu anderen DBMS gleich vergessen.
Also ist das, was ihr beide hier gerade diskutiert, irgendwie reichlich OT.
Das Problem sind nicht die Backticks, sondern die reservierten Keywords die man damit als Namen verwenden kann. Genau diese Namen sind i.d.R. bei anderen DB-Systemen auch reserviert.
Das Einfachste ist es einfach eindeutige Namen zu vergeben.