我在列上有3个单独的FULLTEXT索引:城市,文本,组和3个对应值$ city,$ text和$ group。
我想要做的是基本上有多个WHERE条件,只有在定义变量时才会运行。 E.G如果$ city和$ text在列City中为$ city定义为WHERE,在Text列中为$ text定义WHERE。
这是我目前的MySQL查询:
$result = mysql_query("
SELECT * FROM Posts
WHERE MATCH (City) AGAINST ('$city')
ORDER by Date DESC LIMIT $limit_posts OFFSET $first_post
");
我不知道怎么做而不会弄乱查询。
我该怎么办?
答案 0 :(得分:1)
你可以这样做:
警告:提前破解代码
// Column name => column value
$filter = array(
'city' => $city,
'text' => $text,
'group' => $group,
);
$filter_sql = 'WHERE ';
foreach ($filter as $key=>$value)
$filter[$key] = "MATCH ($key) AGAINST ('$value') ";
$filter_sql .= implode($filter, ' AND ');
$query = "SELECT * FROM Posts
$filter_sql
ORDER by Date DESC LIMIT $limit_posts OFFSET $first_post";
请确保根据要过滤的列正确填充$filter
数组。
答案 1 :(得分:0)
可能最容易在应用程序代码中动态构建查询。
答案 2 :(得分:0)
最佳解决方案是动态编写查询,如其他地方所示。但是一个丑陋的黑客,这是不可能的:
SELECT * FROM Posts
WHERE ('$city'='' OR MATCH (City) AGAINST ('$city'))
AND ('$text'='' OR MATCH (text) AGAINST ('$text'))
AND ('$group'='' OR MATCH (group) AGAINT ('$group'))