大丈夫ですので、私のmysqlテーブルで全文検索をしようとしています。ここでは、クエリPHP mysqlと結果が一致しません
SELECT *,
MATCH (title, joke) AGAINST ('welcome') AS relevance,
MATCH (title) AGAINST ('welcome') AS title_relevance
FROM jokes
WHERE MATCH (title, joke) AGAINST ('welcome')
AND flags < 5
ORDER BY title_relevance + relevance + ups DESC, downs ASC LIMIT 0, 30
、ここでは私のテーブルが
CREATE TABLE IF NOT EXISTS `jokes` (
`jid` varchar(24) NOT NULL,
`uid` int(11) NOT NULL,
`title` mediumtext NOT NULL,
`joke` longtext NOT NULL,
`ups` int(11) NOT NULL DEFAULT '0',
`downs` int(11) NOT NULL DEFAULT '0',
`flags` int(11) NOT NULL DEFAULT '0',
`createddate` int(11) NOT NULL,
`editdate` int(11) NOT NULL,
PRIMARY KEY (`jid`),
FULLTEXT KEY `searcher` (`title`,`joke`),
FULLTEXT KEY `title` (`title`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
です私はどちらかが含まれているカップルの行を持っているタイトルで歓迎し、または冗談で、私はいずれかを取得していないようです結果。私が検索する単語は問題ではありません。
私はまた、両方が動作していないよう取り外しとflags < 5
ともups DESC, downs ASC LIMIT 0,30
しようとしました。
これは私がPHPコード
if($st->prepare($SearchQuery))
{
if(!$st->execute())
ChromePhp::log("Execute Error: " . $st->error);
else
{
$results = fetchAll($st);
$ret = new stdClass();
$ret->TotalCount = 0;
$ret->Results = $results;
return $ret;
}
}
で何をすべきかであり、これは(私はそれで投げてきた他のすべてのクエリのために働いている)fetchAllのです。
function fetchAll($result)
{
$array = array();
if($result instanceof mysqli_stmt)
{
$result->store_result();
$variables = array();
$data = array();
$meta = $result->result_metadata();
while($field = $meta->fetch_field())
$variables[] = &$data[$field->name]; // pass by reference
call_user_func_array(array($result, 'bind_result'), $variables);
$i=0;
while($result->fetch())
{
$array[$i] = array();
foreach($data as $k=>$v)
$array[$i][$k] = $v;
$i++;
// don't know why, but when I tried $array[] = $data, I got the same one result in all rows
}
}
elseif($result instanceof mysqli_result)
{
while($row = $result->fetch_assoc())
$array[] = $row;
}
return $array;
}
誰でも私がここで間違っていることは何ですか?
ありがとうございました。
結果句の削除は、結果の欠落/不在に影響を与えます(ほとんど決してありません)。あなたはデータベースにどれくらいのデータを持っていますか?フルテキストは、フィールドの50%以上に現れる単語をノイズとみなし、無視することを覚えておいてください。 –
DB上で直接クエリを実行すると(コードを照会していない)どうなりますか? – babonk
私は自分のデータベースにSQLを直接(mysqladminのSQL経由で)実行しても、結果は得られません。私はデータベースに7つのエントリしかないと言っています。 –