我在互联网上找不到答案,可能是因为我不知道要搜索的正确术语/行话。
我正在使用自己的搜索功能从我的表中获取行。 我有三行带有此输入的列(没有引号):
"食"
"食べる"
"食糧"
现在,当我搜索“食
”时,我希望查询返回所有这三个结果。但我只得到第一个“食
”,我的查询中返回的完全匹配。我如何抓住所有这些?
我的查询:
$sw = '食';
$query = 'SELECT *, MATCH(word) AGAINST("'.$sw.'") as score FROM wordlist WHERE MATCH(word) AGAINST("'.$sw.'") ORDER BY score DESC;';
我感谢所有人的帮助。
编辑:添加%不起作用,例如“%'。$ sw。'%”。到目前为止,答案都没有。 :/
答案 0 :(得分:1)
使用LIKE
:
$sw = '食';
$query = '
SELECT *, MATCH(word) AGAINST("'.$sw.'") as score
FROM wordlist
WHERE work LIKE "'.$sw.'%"
ORDER BY score DESC';
答案 1 :(得分:0)
你能用吗,
'SELECT *, MATCH(word) AGAINST("'.$sw.'") as score FROM wordlist WHERE MATCH(word) LIKE '%'.$sw.'%' ORDER BY score DESC;'
而不是您自己的查询
答案 2 :(得分:0)
试试这个:
$sw = '食';
$query = 'SELECT *, MATCH(word) AGAINST("'.$sw.'") as score FROM wordlist WHERE word LIKE "%'.$sw.'%" ORDER BY score DESC;';
此外,你应该检查转义,sql注入和准备好的语句。
答案 3 :(得分:0)
也许你应该使用LIKE比较但是如果你想继续使用MATCH()AGAINST()试试这个:
$sw = '食';
$query = 'SELECT *, MATCH(word) AGAINST("+'.$sw.'") as score FROM wordlist WHERE MATCH(word) AGAINST("+'.$sw.'") ORDER BY score DESC;';