基于SUM的mysql选择

时间:2012-07-30 16:16:31

标签: php mysql

我需要做一个mysql查询,但我不知道该怎么做。

我想通过将两个表字段一起添加(在分割之后)来选择大于$x的php值的行。

伪代码:

 SELECT * FROM table WHERE (field_a/50 + field_b/20)  > $x

$x是一个php值,它只是我需要的总和。

有人有提示吗?

2 个答案:

答案 0 :(得分:3)

这几乎是你写的伪代码:

$x = 100; // example
$x = mysql_real_escape_string($x); // "securing" the value.

$sql = "SELECT * FROM table WHERE (field_a/50 + field_b/20)  > '$x'";

$result = mysql_query($sql);

使用参数更优雅,但你明白了。这样,如果$x为空或具有任何不期望的值,则可以弄乱SQL查询。我在使用mysql_real_escape_string之前使用$stmt = $mysqli->prepare("SELECT * FROM table WHERE (field_a/50 + field_b/20) > ?"); // "i' is a format string, each "i" means integer $stmt->bind_param("i", $x); // use "d" instead of "i" for double $stmt->execute(); $stmt->bind_result($col1, $col2); 处理了这个问题,然后在查询中使用它。

修改

使用MySQLi的相同示例:

{{1}}

答案 1 :(得分:0)

这几乎就是你如何去做的。除了在构建查询字符串之前确保$ x是正确的数字之外,你已经得到了它。

一个小建议 - 如果经常进行此类查询,您可能需要考虑在单独的字段中缓存field_a/field_b内容的值。这是一个轻微的非规范化,但它允许对该字段进行索引并可能提高性能。现在你正在对派生/计算值进行处理,这使得无法使用索引。