我需要做一个mysql查询,但我不知道该怎么做。
我想通过将两个表字段一起添加(在分割之后)来选择大于$x
的php值的行。
伪代码:
SELECT * FROM table WHERE (field_a/50 + field_b/20) > $x
$x
是一个php值,它只是我需要的总和。
有人有提示吗?
答案 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
内容的值。这是一个轻微的非规范化,但它允许对该字段进行索引并可能提高性能。现在你正在对派生/计算值进行处理,这使得无法使用索引。