Om du använder MyISAM kan du använda FullText index....
SELECT * FROM test WHERE MATCH (desc) AGAINST('$string');
CREATE TABLE test ( desc TEXT, FULLTEXT(desc) ) ENGINE=MyISAM;
1 svar · 1 023 visningar · startad av Skatedragon
Hej!
Jag har två tabeller i en mysql-databas.
Den ena innehåller textbaserade artiklar.
Den andra innehåller flera poster med ord som ska hittas i artiklarna.
För att hitta dessa använde jag följande SQL-sats.
//hämtar varje post från ord-tabellen och loopar dessa
$sql = "SELECT id,url,title FROM posts WHERE `desc` LIKE '%".$q2["names"]."%' AND time > '".strtotime($q2["lastchecked"])."'" or exit(mysql_error());
//loopar ut resultatet från posts
Problemet är att den matchar t.ex "Abba" med "tabbar", och jag vill bara att den ska matcha om exakt rätt ord hittas.
Dessvärre innehåller kolumnen names precis som det kan antas flera namn separerade med kommatecken.. tex namn1,namn2,namn3.
Jag har kommit en bit på vägen, men lyckas inte få till SQL-satsen riktigt. Så som det är nu hittas inga resultat alls mot tidigare ca 300.
$sql = "SELECT id,url,title FROM posts WHERE (`desc` REGEXP '[[:<:]]" . str_replace(",","[[:>:]]' OR `desc` REGEXP '[[:<:]]",$q2["names"])."[[:>:]]') AND (`desc` REGEXP '[[:<:]]" . str_replace(",","[[:>:]]' OR `desc` REGEXP '[[:<:]]",$q2["relatedto"])."[[:>:]]') AND time > '".strtotime($q2["lastchecked"])."'" or exit(mysql_error());
Någon som har något förslag? Finns det en bättre lösning?
Om du använder MyISAM kan du använda FullText index....
SELECT * FROM test WHERE MATCH (desc) AGAINST('$string');
CREATE TABLE test ( desc TEXT, FULLTEXT(desc) ) ENGINE=MyISAM;