动态MySQL查询?

时间:2011-08-03 04:32:54

标签: php mysql

我在列上有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
");

我不知道怎么做而不会弄乱查询。

我该怎么办?

3 个答案:

答案 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'))