Dobrze, więc próbuję wykonać wyszukiwanie pełnotekstowe na moim stole mysql. Oto zapytaniephp mysql mecz bez wyników
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
i tu jest mój stół
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;
mam kilka wierszy, które zawierają zarówno mile widziany w tytule lub w żart, ale nie wydaje się, aby każdy wyniki. Nie ma znaczenia, jakie słowo szukam.
Próbowałem zostały również usuwania i flags < 5
a także ups DESC, downs ASC LIMIT 0,30
Oba wydają się nie działać.
To co mam zrobić z kodu 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;
}
}
a to fetchAll (który pracował dla każdego innego zapytania Mam rzucił na nią).
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;
}
Ktoś ma jakieś pomysły, co robię źle tutaj?
Dzięki.
Usunięcie klauzul porządku (prawie nigdy) nie wpłynie na brak/obecność wyników. Ile danych masz w bazie danych? pamiętaj, że fulltext rozpatrzy każde słowo (słowa), które pojawią się w 50% + pól jako szum i zignoruje je. –
Co stanie się, gdy po prostu uruchomisz kwerendę bezpośrednio na swoim DB (bez kodu zapytania)? – babonk
Po uruchomieniu SQL bezpośrednio do mojej bazy danych (przez SQL w mysqladmin) nie otrzymuję wyników. Mam tylko 7 wpisów w bazie danych. –