MySQL SELECT查询语法 - 没有按预期工作?

时间:2011-09-05 02:48:53

标签: php mysql

我似乎无法让这个工作,

基本上,我要做的是返回列timestamp多于变量$timestamp的所有行,列hit_counter小于列{{ 1}}。

让第一部分工作不是问题,但第二部分似乎是,因为当max_hits超过hit_counter时它仍然会提取行。

这是我的代码:

max_hits

这似乎会返回$query = "SELECT * FROM links WHERE timestamp >= '$timestamp' AND hit_counter >= 'max_hits' AND overflow = 'NO'"; $result = mysql_query($query); $size = mysql_num_rows($result); 的所有正确行,但仍会继续选择timestamp超过hit_counter的行(即使它根本不应选择任何行) max_hits大于或等于),而将>=反转为>=则不会返回任何结果,即使在数学上,它也是有效的。

我想也许我正在引用<=作为一个错误的值,因为我不明白为什么它首先起作用?

我知道我的问题有点不确定,所以如果你需要澄清,请问:)。

任何答案/帮助将不胜感激!

更新

我已根据下面的许多优秀答案更新了查询,(删除了''包围max_hits并将max_hits更改为>=,但它仍会返回不属于的行要包含在查询中。

这是我的完整代码的粘贴:http://pastebin.com/V4vXJr1w

以下是我的表格结构的链接:https://docs.google.com/spreadsheet/ccc?key=0AoELUDjfbpSXdEUybkgwQmpxUnVCWlZOZnFJdzFaQmc&hl=en_GB

3 个答案:

答案 0 :(得分:3)

我认为如果删除'max_hits'周围的引号,它将会有效:

$query = "SELECT * FROM links WHERE timestamp >= '".$timestamp."' AND hit_counter <= max_hits AND overflow = 'NO'";

问题在于您指的是字符串'max_hits'而不是列值。

答案 1 :(得分:1)

$query = "SELECT * FROM links WHERE timestamp >= '$timestamp' AND hit_counter >= 'max_hits' AND overflow = 'NO'";

如果max_hits是一列,则需要丢失引号。

$query = "SELECT * FROM links WHERE timestamp >= '$timestamp' AND hit_counter >= max_hits AND overflow = 'NO'";

答案 2 :(得分:0)

我一眼就看错了两件事。

  1. 如果你想将一列与另一列进行比较,你不想引用列名,mysql只是将你的hit_counter列与字符串'max_hits'进行比较。

  2. 也许我误会了你,但我认为你有一个比你更大的迹象。它大致应该是:

    SELECT * FROM links WHERE timestamp&gt; ='$ timestamp'AND hit_counter&lt; max_hits AND overflow ='NO'