2014-03-27 39 views
0

我已经为使用php查询数据库的同事编写了一个快速搜索页面。它们的字符串被命名为$ wordvariable(他们也摘枣等,但是这不是这里重要的),这里是我在做什么至今:SELECT * FROM表where'column like'%variable%' - 任意顺序的多个单词

$wordvariable = explode(" ", $wordvariable); 
$wordvariable = implode("%", $wordvariable); 
$Query = mysql_query(
    "SELECT * FROM table 
    WHERE (column1 like '%$wordvariable%' or column2 like '%$wordvariable%') 
    AND logdatex between $TimeEarlier and $TimeNow" 
) or die(mysql_error()); 

然而,这只是搜索的话,他们在自己有订单类型键入它们,例如搜索“堆栈溢出”会发现“堆栈溢出”,但不会找到“溢出堆栈”。我希望我的措辞这个正确的,任何帮助,将不胜感激

+0

你的榜样,如果他们在搜查 “%堆栈溢出%”,就不会找到 “溢出堆栈” 。他们没有任何相似之处。如果您打算通过单个输入中的各种单词进行搜索,则应首先将搜索分成单独的单词。这会让你获得更好的结果。 – durbnpoisn

+0

我知道它不会找到它,但它有助于我发现它后我 – Maff

回答

0

是这样的:

$where = "WHERE column1 LIKE '%" . implode("%' OR column1 LIKE '%", explode(" ", $wordvariable)) . "%'"; 

短路故障,只是explode$wordvariable的空间,然后implode对短语的个别单词,你想。

更详细,包括column2

$words = explode(" ", $wordvariable); 
$list1 = implode("%' OR column1 LIKE '%", $words); 
$list2 = implode("%' OR column2 LIKE '%", $words); 

echo $where = "WHERE (column1 LIKE '%$list1%') OR (column2 LIKE '%$list2%')"; 
0

更新你的代码就像这里:

$wordvariable = explode(" ", $wordvariable); 

$Query = mysql_query(
    "SELECT * FROM table 
    WHERE (column1 like '%" . implode("%' OR column1 Like '%", $wordvariable) . "%' 
    OR column2 like '%" . implode("%' OR column2 Like '%", $wordvariable) . "%') 
    AND logdatex between $TimeEarlier and $TimeNow" 
) or die(mysql_error()); 
相关问题