我需要做一个 mysql 查询,但我不知道该怎么做。
$x
我想通过将 2 个表字段加在一起(在划分它们之后)来选择大于 php 值的行。
伪代码:
SELECT * FROM table WHERE (field_a/50 + field_b/20) > $x
这$x
是一个php值,它只是我需要的总和。
有人有提示吗?
这几乎是您编写的伪代码:
$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);
使用参数更优雅,但你明白了。这样,如果 SQL 查询$x
为空或有任何非预期值,您就可以弄乱 SQL 查询。mysql_real_escape_string
我处理了这个问题,在查询中使用它之前转义了值。
编辑
使用 MySQLi 的相同示例:
$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);
这几乎就是你要做的事情。除了在构建查询字符串之前确保 $x 是正确的数字之外,您已经掌握了它。
一个小建议 - 如果您经常执行此类查询,您可能需要考虑将这些field_a/field_b
内容的值缓存在单独的字段中。这是一种轻微的非规范化,但它允许对该字段进行索引并可能提高性能。现在,您正在对派生/计算值执行 where,这使得无法使用索引。